2010-05-26 49 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; }