ModelState.IsValid n'exclut pas nécessaire de propriété
Im essayant d'exclure une propriété requise(Mot de passe) de sorte que le modelstate ne valider que c'est bien, mais pour quelque raison il encore valider, même quand j'essaie de l'exclure.
Contrôleur:
[Authorize, AcceptVerbs(HttpVerbs.Post)]
public ActionResult _Edit(int id, [Bind(Exclude = "Password")]FormCollection collection)
{
var user = Proxy.GetUser(id);
TryUpdateModel(user, null, null, new[]{"Password"});
if(!ModelState.IsValid)
return PartialView(user);
Proxy.UpdateUser(user);
}
Vue:
...
<tr>
<td class="label">
<label class="row_description" for="Password"><%= S._("Password")%></label>
</td>
<td>
<%= Html.Password("Password", null, new { @class = "row_input" })%>
<%= Html.ValidationMessage("Password", "*")%>
</td>
</tr>
De l'utilisateur(à l'aide de dataannotation):
[Required]
public string Password { get; set; }
Im en utilisant VS2008, MVC2, firefox
Peut-être que je suis juste fatigué et ne pouvez pas le voir. Toute aide est appréciée
OriginalL'auteur larole | 2010-07-02
Vous devez vous connecter pour publier un commentaire.
Je suis actuellement confronté à un problème similaire avec MVC3.
Malgré
[Bind(Exclude = "Password")]
dans mon Action,ModelState.IsValid
renvoie toujours false.J'ai remarqué que
TryUpdateModel(user, null, null, new string[]{"Password"});
a bien été mise à jour le modèle; toutefois encore retourner false. J'ai alors découvert (quelque part sur stackoverflow, les excuses pour ne pas avoir de lien) quiTryUpdateModel
renvoie en faitModelState.IsValid
.Ainsi, la question n'est pas avec
TryUpdateModel
, mais avecModelState.IsValid
.NB: cela signifie également que vous n'avez pas besoin de vérifier à deux fois... vous pouvez utiliser ce code:
Le problème apparaît donc comme si ModelState est toujours la validation de propriétés qui ont été exclus de votre
FormCollection
.J'ai été en mesure de surmonter ce problème en supprimant le champ de
ModelState
avant de faire appel àTryUpdateModel
:Noter que tryupdatemodel pour mettre nécessite encore de la liste des propriétés à exclure de la mise à jour comme par le code ci-dessus.
Je suis d'accord, il ne semble un peu contre-intuitif que tryupdatemodel pour mettre exclut les propriétés énumérées dans le excludeProperty, mais IsValid ne pas exclure ceux énumérés dans la liaison(Exclure) (ou, dans le excludeProperty).
Je crois que j'ai trouvé la réponse: bradwilson.typepad.com/blog/2010/01/...
OriginalL'auteur Mark van Proctor
J'ai eu du succès en utilisant la méthode suivante au sein de l'ASP .NET MVC 2
De garder le TryUpdate de se lier à certaines propriétés du modèle, vous pouvez créer une inclusion modèle tel que celui ci-dessous:
La mise à jour de la TryUpodateModel appel comme suit:
OriginalL'auteur Roland Schaer
Vous pouvez utiliser une méthode d'extension de la sorte:
Puis il suffit d'appeler:
OriginalL'auteur Murphybro2
Peut-être que vous devez remplacer
avec
Car il peut être source de confusion qui surcharge pour tryupdatemodel pour mettre.
Juste pour dire...
OriginalL'auteur Francisco
J'ai utilisé avec succès
[Bind(Exclude = "Property")]
etModelState.Remove("Property")
ensemble, et cela a fonctionné comme un charme.OriginalL'auteur Irina Scurtu
Dirait que je suis la réponse trop tard, mais j'ai aussi été confronté au même problème.
Vérifier votre
ModelState.Keys
collection. Les touches peuvent être sous la forme demodelObjectName.Password
et même pour le reste des propriétés du modèle.Donc dans ce cas
ModelState.Remove("Password")
ne fonctionnera pas. Vous devriez essayerModelState.Remove("modelObjectName.Password")
Espère que ce résoudre à quelqu'un 🙂
OriginalL'auteur Avtar Singh