8
votes

Modelstate.isvalid n'exclut pas la propriété requise

im essayant d'exclure une propriété requise (mot de passe) afin que le modèle de modèle ne valide pas cette propriété, mais pour une raison quelconque, il validait toujours même lorsque j'essaie de l'exclure.

Contrôleur: P>

[Required]
public string Password { get; set; }


0 commentaires

7 Réponses :


0
votes

Peut-être que vous devriez remplacer

TryUpdateModel(user, null, null, new string[] {"Password"});


1 commentaires

Thx pour la réponse, mais je pense que mon problème est lié à moi en utilisant le même modèle pour créer et éditer. Je veux que le mot de passe soit requis lors de la création mais pas lors de la modification. La liste blanche / noire n'a apparemment rien à voir avec la modélisation d'être valide: D



16
votes

Je connais actuellement un problème similaire avec MVC3.

malgré [BIND (EXCLUDE = "mot de passe")] code> dans mon action, modelstate.isvalid code> retourne toujours faux. p>

J'ai remarqué que tryupdateemodel (utilisateur, null, null, nouvelle chaîne [] {"mot de passe"}); code> mise à jour avec succès le modèle; Cependant, retournez de faux. J'ai ensuite découvert (quelque part sur Stackoverflow, excuses de ne pas avoir le lien) que tryupdateemodel code> renvoie effectivement modelstate.isvalid code>. P>

Ainsi, le problème est donc pas avec tryupdateemodel code>, mais avec modelstate.isvalid code>. p>

NB: Cela signifie également que vous n'avez pas besoin de vérifier cela deux fois ... vous pouvez Utilisez ce code: P>

ModelState.Remove("Password");


3 commentaires

Je me débats aussi avec ça. Il semble piraté d'effectuer des modèles de modèle.Retirer, quand cela devrait évidemment être exclu. Quelqu'un peut-il expliquer exactement pourquoi le validaton MC3 ignore BIND (exclude =)?


@James: Je suis d'accord, cela semble quelque peu contre-intuitif que TryupDaTemodel exclut les propriétés énumérées dans l'exclutProperty, mais ISVALID n'exclut pas ceux énumérés dans la liaison (exclure) (ou dans l'exclutProperty).


Je pense que j'ai trouvé la réponse: bradwilson.typepad.com/blog/2010/01/...



3
votes

J'ai eu le succès en utilisant la méthode suivante dans ASP .NET MVC 2

TryUpdateModel<IUserValidateBindable>(user);


0 commentaires

0
votes

i utilisé avec succès [BIND (exclude = "Propriété")] et modelstate.remove ("propriété") ensemble, et cela a fonctionné comme charme.


0 commentaires

-1
votes

On dirait que je répondais trop tard, mais je suis également confronté au même problème.

Vérifiez votre ModelState.Keys Collection. Les clés peuvent être sous la forme de ModelObjectName.Password et idem pour le reste des propriétés du modèle.

donc dans ce cas modelstate.remove ("mot de passe") ne fonctionnera pas. Vous devriez essayer modelstate.remove ("modèleObjectName.password")

J'espère que cela résolve la question de quelqu'un :)


0 commentaires

1
votes

Vous pouvez utiliser une méthode d'extension, comme: xxx

Appelez simplement: xxx


0 commentaires

0
votes

Dans mon cas, je suis confronté à une erreur sur modelstate.isvalid avec supprimer qu'il ne fonctionne pas pour moi dans webapi asp.net mvc puis je suive l'erreur

 Entrez la description de l'image ici

Puis j'ajouterai le modèle modelstate.remove ("model.description"); que j'ai défini le modèle en tant que paramètre puis j'ai utilisé le nom du paramètre, puis modélistate fonctionne comme ci-dessous:

 Entrez la description de l'image ici


0 commentaires