2010-05-26 19 views
4

Je veux personnaliser la sortie html de ValidationSummary dans ASP.NET MVC 2Personnaliser ValidationSummary dans ASP.NET MVC 2

de

<div class="validation-summary-errors"> 
    <span>Oops! validation was failed because:</span> 
    <ul> 
     <li>The Title field is required.</li> 
     <li>The Body field is required.</li> 
    </ul> 
</div> 

à

<div class="validation-error"> 
    <p>Oops! validation was failed because:</p> 
    <ul> 
     <li>The Title field is required.</li> 
     <li>The Body field is required.</li> 
    </ul> 
</div> 

Y at-il une nouvelle façon dans asp.net MVC 2 pour résoudre ce problème?

Répondre

6

Il ne semble pas y avoir de moyen de le faire avec des modèles, ce qui est plutôt mauvais. Si vous jetez un coup d'oeil au code de cette méthode d'assistance particulière, vous verrez le code HTML est cuit dans la méthode elle-même:

public static string ValidationSummary(this HtmlHelper htmlHelper, string message, IDictionary<string, object> htmlAttributes) { 
    // Nothing to do if there aren't any errors 
    if (htmlHelper.ViewData.ModelState.IsValid) { 
     return null; 
    } 

    string messageSpan; 
    if (!String.IsNullOrEmpty(message)) { 
     TagBuilder spanTag = new TagBuilder("span"); 
     spanTag.MergeAttributes(htmlAttributes); 
     spanTag.MergeAttribute("class", HtmlHelper.ValidationSummaryCssClassName); 
     spanTag.SetInnerText(message); 
     messageSpan = spanTag.ToString(TagRenderMode.Normal) + Environment.NewLine; 
    } 
    else { 
     messageSpan = null; 
    } 

    StringBuilder htmlSummary = new StringBuilder(); 
    TagBuilder unorderedList = new TagBuilder("ul"); 
    unorderedList.MergeAttributes(htmlAttributes); 
    unorderedList.MergeAttribute("class", HtmlHelper.ValidationSummaryCssClassName); 

    foreach (ModelState modelState in htmlHelper.ViewData.ModelState.Values) { 
     foreach (ModelError modelError in modelState.Errors) { 
      string errorText = GetUserErrorMessageOrDefault(htmlHelper.ViewContext.HttpContext, modelError, null /* modelState */); 
      if (!String.IsNullOrEmpty(errorText)) { 
       TagBuilder listItem = new TagBuilder("li"); 
       listItem.SetInnerText(errorText); 
       htmlSummary.AppendLine(listItem.ToString(TagRenderMode.Normal)); 
      } 
     } 
    } 
} 

Les bonnes nouvelles sont, avec MVC étant open source, vous pouvez aller et saisir les source de the CodePlex repository et tordez-le comme vous le souhaitez. Alternativement, vous pouvez faire référence à cet intervalle via CSS et le styler en tant que p.

2

Ceci est la façon de référencer besoin de style -You 'll en conséquence:

.validation-summary-errors > span { margin: 0px; }