ASP.NET MVC ValidationationAmmary с ExcludePropertyErrors = True Randers пусто, если модель недействительна
-
27-09-2019 - |
Вопрос
Скажем, у вас есть стандартная варительность:
<%: Html.ValidationSummary(excludePropertyErrors: true) %>
Если ModelState содержит модельные ошибки для свойств, но не для самой модели, сама валидация гарантирует следующий HTML:
<div class="validation-summary-errors"><ul><li style="display:none"></li></ul></div>
Который отображается как пустой список, но все еще виден из-за красной границы вокруг списка. Это, кажется, ошибка для меня. Могу ли я отключить, что помощник валидации, когда-либо сделает пустой список?
Решение
Похоже на ответ 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;
}
Таким образом, я не должен вилять оригинал.
Договорились, хотя это очень раздражает.
Другие советы
После того, как я узнал, что нет никакого решения, глядя на источник, я решил проблему, вынув версию MVC кода и изменять одну строку.
Еще одно изменение исправления с классами Bootstrap:
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;
}
}
Другой обходной путь состоит в том, чтобы переместить стиль в Div. Вот CSS:
div.validation-summary-valid {
display: none;
}
Когда сводная информация о возврате без ошибок не отображается div. Когда есть ошибки, класс автоматически изменяется на ошибки проверки - Summary.