2009-03-19 4 views
0

J'ai un problème avec le réglage du message de validation. J'ai deux modèles dans un contrôle et les deux modèles ont la même propriété "quantité".Message de validation

La définition de la validation pour un Model.amount sera répercutée sur d'autres Model.amount. J'ai essayé de passer différents identifiants aux deux, mais ne fonctionne pas.

<%= Html.TextBox("amount", Model.amount, new { id = "Pamount" })%> 
    <%=Html.ValidationMessage("Pamount", " ")%> 
<%= Html.TextBox("amount", Model.amount, new { id = "Eamount" })%> 
    <%=Html.ValidationMessage("Eamount", " ")%> 

et dans l'action que je suis en train

if (obj.amount.ToString() == "0") 
      modalState.AddModelError("Pamount", ""); 

mais la validation est appliquée à Eamount ainsi

Que dois-je faire?

Répondre

0

Je pense que lorsque vous ajoutez une erreur de modèle, vous accédez au champ par nom et non par ID. Donc, vous voulez faire

ModelState.AddModelError("amount", ""); 

De plus, je recommande de donner les zones de texte des noms différents afin que vous n'ajoutez pas une erreur à la fois d'entre eux quand une seule est à l'origine de l'erreur qui pourrait causer une certaine confusion.

0

La surbrillance de validation est appliquée en fonction du nom du contrôle. Le nom doit refléter le nom de la propriété pour que la liaison de modèle fonctionne. Par conséquent, vous ne pouvez pas avoir deux contrôles avec le même nom et la mise en surbrillance de validation fonctionne correctement. Vous devez donc donner des noms différents aux contrôles. Vous pouvez le faire de deux manières:

  1. Créez un modèle de présentation avec deux propriétés différentes pour les différentes quantités. Transformez le modèle de présentation en/depuis les objets réels que vous mettez à jour lors de l'affichage du formulaire ou de la gestion d'un article, respectivement.

  2. Créez un seul modèle avec des propriétés secondaires pour les deux objets, puis accédez aux deux montants à l'aide de la notation par points.

Comme ceci:

<%= Html.TextBox("Foo.amount", Model.Foo.amount, [...] 
<%= Html.TextBox("Bar.amount", Model.Bar.amount, [...] 
Questions connexes