2009-08-18 5 views
3

J'ai une case à cocher qui ressemble à ceciComment vérifier si une case à cocher est cochée dans ASP.NET MVC?

Ceci est sous une forme. Donc, quand il va à ma méthode d'action, j'ai juste une variable de collection de formulaire. Maintenant, j'essaie de le faire

frmSign ["Remember"];

J'ai donc essayé de convertir ceci immédiatement en un booléen et cela a échoué. Je me suis alors fait .toString() et je me suis aperçu que la valeur contenue dans c'est

"true, false"

Est-ce normal? Pourquoi est-ce vrai, faux? Est-il maintenant vrai ou faux?

+0

En avez-vous deux sur la page? –

+0

Non, c'est la première chose que j'ai cherché. Je n'en ai pas. J'ai remarqué à travers firebug mais j'ai ceci. Je ne sais pas si c'est normal ou non. chobo2

+0

Ah. Eh bien, je ne sais rien à propos de MVC spécifiquement, alors peut-être que c'est bon. Je pense que la réponse des autres affiches est plus utile, alors je vous laisse ça. D'un point de vue purement «demande», cela explique les deux valeurs. –

Répondre

9

Vous pouvez simplement ajouter un paramètre booléen à votre action:

public ActionResult LogIn(string username, string password, bool remember) 
{ 
    // You have it 
} 

De plus, vous pouvez utiliser RouteValues ​​[ "Souviens-toi"] pour obtenir le ValueProviderResult.
Vous vous pouvez faire:

public ActionResult LogIn(string username, string password) 
{ 
     bool remember = false; 
     ValueProviderResult val; 
     if (RouteValues.TryGetValue(key, out val)) 
      remember = (bool)val.ConvertTo(typeof(bool)); 
     // Now you have it 
} 

Mais je préfère la 1ère option pour des raisons évidentes.

Quant à la question:

Est-ce normal? pourquoi est-ce vrai, faux? qu'est-ce que c'est maintenant vrai ou faux?

Oui c'est normal. L'aide checkbox dans MVC génère toujours une entrée cachée avec la valeur "False". Ceci est nécessaire pour fournir une valeur False si la case n'est pas cochée.
Pourquoi?
En raison de selon W3.ORG la valeur n'est publiée sur le serveur que si la case est cochée, sinon ce n'est pas le cas (donc vous ne savez pas si c'est Vrai ou Faux, par exemple est nul). Par conséquent, si vous cochez la case "true, false", le serveur se verra attribuer la valeur true.
Si la case à cocher n'est PAS sélectionnée, le mot "faux" est envoyé au serveur et vous pouvez être sûr qu'il n'est PAS sélectionné.

Pour clarifier davantage: les valeurs (selon W3.ORG) du même nom sont séparées par des virgules. Il est donc parfaitement possible d'avoir différentes entrées avec le même nom sous forme unique (même si les entrées sont de différents types: case à cocher, radio, texte, caché, etc.).

+0

ya la première option qui fonctionne mais je ne vois pas pourquoi je l'ai dans un frmCollection. C'est soit une sorte de bug ou je fais quelque chose de mal. J'aime le frmCollection, car il est tellement plus facile de passer des choses dans le UpdateModel. Je suppose que je pourrais garder frmCollection et passer un paramètre bool. Cela semble juste bizarre de le faire. – chobo2

+1

J'ai ajouté l'explication. –

Questions connexes