2010-10-03 54 views
10

假設你有一個標準的ValidationSummary:ASP.NET MVC的ValidationSummary與excludePropertyErrors =真實呈現空,如果模型無效

<%: Html.ValidationSummary(excludePropertyErrors: true) %> 

如果ModelState中包含屬性模特錯誤,但不是模式本身在ValidationSummary呈現以下HTML:

<div class="validation-summary-errors"><ul><li style="display:none"></li></ul></div> 

它顯示爲空列表,但由於列表周圍有紅色邊框,所以它仍然可見。這對我來說似乎是一個錯誤。我可以關閉ValidationSummary幫助器是否會呈現空列表?

回答

11

到USR的答案類似,我解決了這個問題有以下:

public static IHtmlString FixedValidationSummary(this HtmlHelper htmlHelper) 
{ 
    return htmlHelper.FixedValidationSummary(false); 
} 

public static IHtmlString FixedValidationSummary(this HtmlHelper htmlHelper, 
    bool excludePropertyErrors) 
{ 
    var result = htmlHelper.ValidationSummary(excludePropertyErrors); 
    return result == null || result.ToString().Contains("display:none") ? null : result; 
} 

這樣我就不必實際叉原件。

同意,但是,這是非常煩人的。

2

當我發現通過查看源代碼沒有解決方案後,我通過分叉代碼的MVC版本和修改一行來解決問題。

+0

嗯.. sux :( – 2011-02-16 05:53:40

+0

你只需要fork 3個函數。 – usr 2011-02-20 15:40:35

0

與自舉類修復的另一個變化是:

public static class ValidationSummaryExtensions 
{ 
    public static MvcHtmlString CleanValidationSummary(this HtmlHelper htmlHelper, bool excludePropertyErrors, string message = null) 
    { 
     if(htmlHelper == null) throw new ArgumentNullException("htmlHelper"); 

     MvcHtmlString validationSummary = null; 
     if (htmlHelper.ViewData.ModelState.ContainsKey(string.Empty)) 
     { 
      var htmlAttributes = new { @class = "alert alert-danger" }; 
      validationSummary = htmlHelper.ValidationSummary(excludePropertyErrors, message, htmlAttributes); 
     } 

     return validationSummary; 
    } 
} 
0

另一個解決方法是將樣式移動到div。這裏的CSS:

div.validation-summary-valid { 
    display: none; 
} 

當彙總沒有錯誤返回時,div不會顯示。出現錯誤時,該類將自動更改爲驗證摘要錯誤。