No meu aplicativo ASP.NET MVC, estou processando uma caixa de seleção usando o seguinte código:
<%= Html.CheckBoxFor(i=>i.ReceiveRSVPNotifications) %>
Agora, vejo que isso torna tanto a tag de entrada caixa de seleção e uma marca de entrada escondida. O problema que estou tendo é quando tento recuperar o valor da caixa de seleção usando o FormCollection:
FormValues["ReceiveRSVPNotifications"]
Eu recebo o valor "verdadeiro, falso". Ao analisar o HTML renderizado, posso ver o seguinte:
<input id="ReceiveRSVPNotifications" name="ReceiveRSVPNotifications" value="true" type="checkbox">
<input name="ReceiveRSVPNotifications" value="false" type="hidden">
Portanto, a coleção FormValues parece unir esses dois valores, pois eles têm o mesmo nome.
Alguma ideia?
fonte
<input>
tag.false
. Veja a resposta de RyanJMcGowan abaixo: "O envio de uma entrada oculta torna possível saber que a caixa de seleção estava presente na página quando a solicitação foi enviada."Eu tive o mesmo problema que Shawn (acima). Essa abordagem pode ser ótima para o POST, mas realmente é péssima para o GET. Portanto, implementei uma extensão Html simples que apenas destaca o campo oculto.
O problema que tenho agora é que não quero uma alteração na estrutura do MVC para quebrar meu código. Portanto, tenho que garantir que tenho cobertura de teste explicando este novo contrato.
fonte
Eu uso esse método alternativo para renderizar as caixas de seleção dos formulários GET:
É semelhante ao método de Chris Kemp , que está funcionando bem, exceto que este não usa o subjacente
CheckBoxFor
eRegex.Replace
. É baseado na fonte doHtml.CheckBoxFor
método original .fonte
Aqui está o código-fonte para a tag de entrada adicional. A Microsoft teve a gentileza de incluir comentários que abordam isso com precisão.
fonte
Eu acho que a solução mais simples é renderizar o elemento INPUT diretamente da seguinte maneira:
Na sintaxe do Razor, é ainda mais fácil, porque o atributo 'marcado' é renderizado diretamente com um valor "marcado" quando recebe um valor "verdadeiro" do lado do servidor.
fonte