60 votes

Pourquoi mon entrée cachée écrit-elle : value="valeur" au lieu de true/false ?

J'ai un site MVC4, avec (comme partie d'un formulaire caché) :

<input name="somefield" type="hidden" value="@ViewBag.Test"/>

La valeur de ViewBag.Test es true . Le champ du formulaire est enregistré dans un paramètre d'entrée du formulaire :

public ActionResult SomeAction(bool somefield = false, ...)

pero somefield est toujours false . En enquêtant, je vois que le code source a :

<input name="somefield" type="hidden" value="value"/>

Cependant, je connaître ça marchait avant. Que s'est-il passé, et que puis-je faire ?

0 votes

0 votes

Et un autre lié mais différent (nul cette fois) : stackoverflow.com/questions/8061647/

1 votes

J'espère que vous l'avez signalé comme un bogue. Cela semble raisonnable pour des choses comme disabled o checked mais définitivement faux pour value .

79voto

Marc Gravell Points 482669

Ce comportement a changé entre MVC3 et MVC4. Dans MVC3, si vous avez :

<input name="somefield" type="hidden" someprop="@(SomeBooleanExpression)"/>

il s'écrirait très littéralement :

<input name="somefield" type="hidden" someprop="True"/>

Cependant, en MVC4, il suit les règles des "checkbox", etc., donc si la valeur est true vous obtenez :

<input name="somefield" type="hidden" someprop="someprop"/>

et si c'est le cas false il est complètement omis :

<input name="somefield" type="hidden"/>

Pour contourner ce problème, envisagez .ToString() :

<input name="somefield" type="hidden"
   someprop="@(SomeBooleanExpression.ToString())"/>

qui suit alors les règles des chaînes de caractères plutôt que celles des booléens.

1 votes

Quelqu'un a-t-il remarqué que s'il y a un espace entre la propriété valeur et le signe égal, le booléen est évalué et assigné comme prévu, c'est-à-dire que 'value =@(someBoolean)' donnera 'value="True"' alors que 'value=@(someBoolean) donnera 'value="value"'.

0 votes

@mcolegro heh, c'est amusant si c'est vrai. Notez qu'il y a Aldo un comportement différent pour @: que pour les blocs HTML ordinaires.

0 votes

Cela a fonctionné, juste au moment où je pense avoir compris des domaines comme celui-ci dans MVC4, je reste bloqué sur des choses comme celle-ci. Merci pour cette réponse, cependant, je ne comprends pas pourquoi la valeur par défaut est "True", plutôt que "true". toLower() résout facilement ce problème.

-1voto

Valeurs booléennes initialisées bool quelque chose =faux ;

puis convertir cette valeur en chaîne de caractères comme,

<input name="somefield" type="hidden" value="@something.ToString()>

                   OR

initialisé chaîne de caractères quelque chose = "faux" ; < input name="somefield" type="hidden" value="@something" >

alors nous pouvons lire

    public ActionResult Somemethod(bool IsFromDB) => you can get Boolean value here 
    {
    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X