2009-06-30 7 views
4

Je souhaite utiliser le message d'erreur renvoyé par RuleViolation en tant que message de validation de Html.ValidationMessage (modelName, validationMessage).asp.net MVC RuleViolation.ErrorMessage dans Html.ValidationMessage

Exemple simple: Person.cs

public partial class Person 
    { 
     public bool IsValid 
     { 
      get { return (GetRuleViolations().Count() == 0); } 
     } 

     public IEnumerable<RuleViolation> GetRuleViolations() 
     { 
      if (String.IsNullOrEmpty(Name)) 
       yield return new RuleViolation("Name required", "Name"); 

      yield break; 
     } 
} 

ajoutant des erreurs à ModelState

foreach (RuleViolation issue in errors) 
      { 
       modelState.AddModelError(issue.PropertyName, issue.ErrorMessage); 
      } 

page asp /createPerson/

<%=Html.TextBox("Name",Model.Name)%> 
<%=Html.ValidationMessage("Name", "Name required")%> 

Ce que je veux faire est d'utiliser la RuleViolation message au lieu de "Nom requis" ci-dessus. Est-ce possible?

solution

est (de Alexander Prokofyev) utilisent ValidationMessage avec un seul paramter

<%=Html.ValidationMessage("Name")%> 

c'est un exemple très simple, certaines de mes règles métier peuvent jeter différents RuleViolations sur une entrée en fonction de la valeur.

Merci beaucoup. Simon

Répondre

4

Vous devez utiliser les aides ValidationMessage() avec un seul paramètre comme

<%= Html.ValidationMessage("Name") %> 

et appeler le code

foreach (var ruleViolation in GetRuleViolations()) 
    ModelState.AddModelError(ruleViolation.PropertyName, 
     ruleViolation.ErrorMessage); 

dans le contrôleur avant de retourner une vue (je suppose que vous avez pris la définition de classe RuleViolation à partir de NerdDinner source).

+0

Merci beaucoup Alexander, DOH! moment pour moi, j'aurais dû voir ça – longhairedsi