2010-10-03 3 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

Mmmm .. это sux :( –

+0

Вам нужно только использовать fork 3 функции. – usr

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

Другим обходным путем, чтобы переместить стиль в дела. Вот CSS:

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

Когда сводка возвращается без ошибок, div не отображается. Когда появляются ошибки, класс автоматически изменяется на валидацию-сводные ошибки.