2010-05-26 53 views
4

我想自定义的ValidationSummary的HTML输出在ASP.NET MVC 2自定义的ValidationSummary在ASP.NET MVC 2

<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> 

有什么新在asp.net MVC 2中解决这个问题的方法?

回答

6

似乎没有什么办法可以用模板来做到这一点,这很糟糕。如果你看看代码为这个特殊的辅助方法,你会看到HTML被烤成方法本身:

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)); 
      } 
     } 
    } 
} 

好消息是,与MVC是开源的,你可以去抢来自the CodePlex repository并以任何你喜欢的方式调整它。

2

或者,您可以通过CSS引用该跨度并将其设置为p。

这是引用它-you'll需要相应风格的方式:

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