2010-10-03 10 views
10

Sagen Sie bitte ein Standard-Validation haben:ASP.NET MVC Validation mit excludePropertyErrors = true macht leer, wenn das Modell ungültig ist

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

Wenn das Modelmodellfehler Objekte enthält, aber nicht für das Modell selbst die Validation macht die folgende HTML:

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

, die als eine leere Liste angezeigt wird, ist aber immer noch sichtbar, weil der rote Rahmen um die Liste. Das scheint mir ein Fehler zu sein. Kann ich ausschalten, dass der ValidationSummary-Helfer jemals eine leere Liste darstellt?

Antwort

11

Ähnlich usr Antwort, Ich reparierte diese mit den folgenden:

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

Auf diese Weise muss ich das Original nicht wirklich Gabel.

Einverstanden, aber das ist sehr ärgerlich.

2

Nachdem ich festgestellt habe, dass es keine Lösung gibt, indem ich auf die Quelle schaue, löste ich das Problem, indem ich die MVC-Version des Codes aufgab und eine Zeile änderte.

+0

Mmmm .. dass sux :( –

+0

Sie müssen nur 3 Funktionen abzweigen. – usr

0

Eine weitere Variante der fix mit Bootstrap-Klassen ist:

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

Eine andere Lösung ist es, den Stil, um die div zu bewegen. Hier ist das CSS:

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

Wenn die Zusammenfassung ohne Fehler zurückkehrt, wird das div nicht angezeigt. Wenn Fehler auftreten, wird die Klasse automatisch in Validierungszusammenfassungsfehler geändert.