Pourquoi Html.Case à cocher(“Visible”) renvoie “vrai", " faux” dans ASP.NET MVC 2?
Je suis en utilisant Html.Checkbox("Visible")
pour afficher une case à cocher pour l'utilisateur. Dans le post de retour, FormCollection["Visible"]
valeur est "vrai", "faux". Pourquoi?
en vue:
<td>
<%: Html.CheckBox("Visible") %>
</td>
dans le contrôleur:
adslService.Visible = bool.Parse(collection["Visible"]);
Vous devez vous connecter pour publier un commentaire.
C'est parce que la
CheckBox
helper génère champ caché avec le même nom que la case à cocher (vous pouvez le voir en parcourant le code source généré):De sorte que les deux valeurs sont transmises au contrôleur de l'action lorsque vous soumettez le formulaire. Voici un commentaire directement à partir de la ASP.NET MVC code source d'expliquer le raisonnement derrière cela supplémentaires champ caché:
Au lieu d'utiliser
FormCollection
je voudrais vous recommandons d'utiliser les modèles de vue que les paramètres de l'action ou directement des types scalaires et de laisser les tracas de l'analyse de la valeur par défaut du modèle de classeur:<input type="checkbox" name="Visible" />
directement en Vue?<input type="checkbox" name="Visible" />
de la vue si vous voulez éviter d'avoir ce champ caché.correct answer
pour gérer cette situation particulière."" + Request.form["...
j'ai aussi posté ma solution ci-dessousJ'ai récemment abordé ce problème et est venu avec une méthode de contournement de la MVC de liaison et d'aide Contient("true") sur la chaîne de requête. Rien d'autre n'a fonctionné pour moi.
Si les gens sont coincés avec les autres réponses alors c'est ce qui a fonctionné pour moi - http://websitesorcery.com/post/2012/03/19/CheckBox-Issue-with-MVC-3-WebGrid-Paging-Sorting.aspx
Si vous voulez/besoin d'utiliser
FormCollection
, au lieu de vérifiertrue
oufalse
, vérifiertrue,false
oufalse
.par exemple au lieu de cela
ce faire
adslService.Visible = collection["Visible"] != "false";
J'ai eu le même problème en MVC 4,
Cette solution a fonctionné pour moi.
Mon (formulaire)Vue:
Pour annuler le double de "vrai", "faux" valeurs lorsque la Case est vrai
J'ai stocké la Case param dans un tableau:
Saisir le premier élément:
Analyser:
Garder:
J'ai eu le même problème. Je l'ai fixée avec la combinaison suivante (avec un peu d'aide de Darin Dimitrov--je vous remercie):
VUE:
Contrôleur:
Voici le code source pour le contrôle avec et sans la case à cocher en fait, vérifié (pour référence):
Vérifié:
Décochée:
Donc, voici comment je suis d'interpréter le comportement:
HTML de ne pas poster de retour la valeur de champ si la case n'est pas cochée, mais affichera en arrière si elle est. L'assistant ajoute un champ caché après le contrôle de case à cocher (valeur False). Si la case est cochée, la source indique "checked = 'checked'" si elle est désactivée, cela ne semble pas. Donc, si l'option est cochée = coché, le vrai est transmise au contrôleur. Si la case n'est pas cochée, le contrôle n'est pas passé ainsi, le champ caché, avec le même nom, prend le dessus et passe un faux. De cette façon, vous avez tous les deux des conditions. Étrange, mais ça fonctionne. J'espère que cette aide.
Le comportement par défaut de la MVC Entension pour Html.Case, génère un champ caché avec elle pour être posté.
Dans mon cas, Parce que la coutume case, j'ai ajouté à la page n'est pas de modèle lié comme le Html.CheckBoxFor, j'ai décidé de faire simple html case.
HTML:
Cela peut sembler idiot, mais permettrait de sauver quelqu'un est temps que de courir après le travail, les solutions de rechange. Cela permettra d'éviter de créer une case à cocher utiliser MVC extension
J'ai déjà une fonction statique que j'utilise partout pour poignée type booléen texte et renvoie true ou false comme un booléen, donc, je viens de prendre soin d'elle, il y