Bon, on dirait que David avait raison. C'est mon incompréhension de la façon dont les deux domaines travaillent ensemble qui fait que sa solution ne fonctionne pas pour moi.
Dans le cas où cette aide quelqu'un d'autre ici est ma solution et comment cela fonctionne:
D'abord, je devais les deux soi-même de champs que David avait décrit ...
<input <%
If category.Value = True Then
%> checked <%
End If
%> class="filterCheckbox" id="model_MarketCategories_<%=i%>__Value" name="model.MarketCategories[<%=i %>].Value" type="checkbox" value="true" />
<input name="model.MarketCategories[<%=i%>].Value" type="hidden" value="False" />
maintenant un bref récapitulatif des raisons pour lesquelles il y a 2 champs:
// Render an additional <input type="hidden".../> for checkboxes. This
// addresses scenarios where unchecked checkboxes are not sent in the request.
// Sending a hidden input makes it possible to know that the checkbox was present
// on the page when the request was submitted.
maintenant, la raison pour laquelle les deux éléments ont le même nom est la suivante: Si le navigateur ignore toutes les autres valeurs d'entrée avec le même nom une fois qu'il a f ound une avec une valeur valide. Donc, si votre navigateur renvoie toujours la valeur de la case à cocher (qu'elle soit cochée ou non), l'élément caché est ignoré.Si par contre votre navigateur n'envoie pas la case à cocher si la case à cocher n'est pas cochée, alors l'élément qui suit immédiatement la case positionnera la valeur de la propriété form sur false et renverra THAT.
Mon malentendu que je pensais que la case à cocher doit toujours conserver la valeur de la propriété réelle, donc quelque chose comme:
<input <%
If category.Value = True Then
%> checked <%
End If
%> class="filterCheckbox" id="model_MarketCategories_<%=i%>__Value" name="model.MarketCategories[<%=i %>].Value" type="checkbox" value="<%=category.Value %>" />
C'est ce qui a été à l'origine des problèmes ... la case à cocher « valeur » doit toujours être vrai . La 'valeur' cachée devrait toujours être fausse. Et c'est l'état de la case à cocher (cochée ou non) qui déterminera ce qui sera renvoyé à votre contrôleur.
Merci David ... parfois, la réponse peut être juste en face de vous, mais si votre cerveau n'est pas prêt à recevoir, il n'y a rien qu'un programmeur compagnon peut faire ;-)
Je crois que ce comportement est prévu, la Le champ caché reste toujours aussi faux, car certains navigateurs n'envoient pas du tout de case à cocher lorsqu'ils ne sont pas cochés. Donc, les scénarios que vous obtiendriez sont true/false false/false false false Donc, si l'une des entrées est true, elle est vérifiée, sinon elle n'est pas vérifiée. le champ caché est juste pour s'assurer qu'il y a toujours des données à vérifier. – dnolan