Usuário com melhor resposta
Razor renderizando um Hidden indevidamente

Pergunta
-
Olá bom dia.
Com 2 campos boolean e hoje percebi que um Hidden está sendo renderizado também.
O código:
@Html.CheckBoxFor(model => model.BaixarTitulo)
Gerou o HTML:
<input id="BaixarTitulo" name="BaixarTitulo" type="checkbox" value="true" /><input name="BaixarTitulo" type="hidden" value="false" />
Mesmo que provavelmente seja normal isso está dando problema quando envio para o host de produção a aplicação. Tenho um JQuery que altera umas coisas quando este checkbox é alterado.
Código:
<script type="text/javascript"> $(function () { @if(Model.BaixarTitulo) { @Html.Raw("$(\"#parcelas\").hide()"); } else { @Html.Raw("disableElements($('#dadospagamento').children());"); } $("#BaixarTitulo").change(function () { var Marcado = $(this).is(':checked'); if (Marcado) { enableElements($('#dadospagamento').children()); $("#parcelas").hide(); } else { disableElements($('#dadospagamento').children()); $("#parcelas").show(); } }); }); </script>
Este enable e disable, como o show e hide de uma div não estão funcionando de jeito nenhum no host oficial. Local está perfeito.
Alguém já passou por isso?
Respostas
-
Esse hidden é normal. O Asp.Net MVC trata esse CheckBoxFor de uma forma diferente, além de criar o input checkbox ele também cria um hidden que armazena o valor do checkbox.
Quanto ao seu codigo javascript, realmente alguma coisa deve estar errada, e isto provavelmente é erro de javascript. Para descobrir faça o seguinte, abra seu site no host de produção, com o google chrome. Clique com direito na página -> Inspecionar Elemento. Após isso abra a aba console. Recarregue a página e tente dar show e hide novamente. Irá aparecer na tela detalhes sobre o erro de js, o que vai ser suficiente para te dar um norte. Caso ainda tenha problemas vai postando os resultados aí.
Valeu!
Ao infinito e além!
- Marcado como Resposta Romulo Oliveira Almeida quarta-feira, 3 de julho de 2013 23:42
Todas as Respostas
-
Esse hidden é normal. O Asp.Net MVC trata esse CheckBoxFor de uma forma diferente, além de criar o input checkbox ele também cria um hidden que armazena o valor do checkbox.
Quanto ao seu codigo javascript, realmente alguma coisa deve estar errada, e isto provavelmente é erro de javascript. Para descobrir faça o seguinte, abra seu site no host de produção, com o google chrome. Clique com direito na página -> Inspecionar Elemento. Após isso abra a aba console. Recarregue a página e tente dar show e hide novamente. Irá aparecer na tela detalhes sobre o erro de js, o que vai ser suficiente para te dar um norte. Caso ainda tenha problemas vai postando os resultados aí.
Valeu!
Ao infinito e além!
- Marcado como Resposta Romulo Oliveira Almeida quarta-feira, 3 de julho de 2013 23:42
-
Romulo,
Quando usamos do Html Helper CheckBox, por padrão ele renderiza um input do tipo hidden armazenando o valor atual, pois quando efetuamos um post da pagina para o servidor, por padrão só é enviado para o servidor apenas os checkboxs que estão habilitado.
Faça oque o Fabio comentou, valide em algum navegador pelo console de desenvolvimento se o script apresenta algum erro, pois olhando seu jQuery, na vi nada de anormal.Vitor Mendes | http://www.vitormendes.com.br/
"Ajuda teu semelhante a levantar a sua carga, porém, não a carregá-la." (Pitágoras)
-
Olá amigos.
Bom aconteceu algo que já percebi antes. O JS estava correto mesmo. Eu fui no FTP, via FileZilla, puxei, coloquei só uns alerts, e upei novamente. Daí ele começou a funcionar e está certinho agora.
Tem horas que parece que o servidor guarda um cache, sei lá. Neste caso eu testei aqui e no trabalho e ficou errado igualmente, foi algo de servidor.
Houve casos que ajustei algo no repositor, controller ou model. Recompilo e envio a pasta Bin para o servidor. Ele simplesmente não pega o que eu upei (mas não deu erro na hora no ftp). Daí depois de reenviar ele passa a funcionar.
Há alguma forma melhor de upar os arquivos direto via FTP? Eu as vezes faço um Publish no VS 2012 direto para o FTP mas demora uns 20 minutos. Via FTP, só substituindo o que mudou, demora uns 50 segundos (projeto iniciando ainda).
Alguma dica?
Obrigado!