我有业务要求只显示@ Html.ValidationSummary中的前5个错误。我创建了一个ValidationSummaryLimited htmlhelper,但我无法弄清楚如何实现excludePropertyErrors块。
public static string ValidationSummaryLimited(this HtmlHelper helper, bool excludePropertyErrors = false, string message = "")
{
const int maximumValidations = 5;
if (helper.ViewData.ModelState.IsValid)
return string.Empty;
StringBuilder sb = new StringBuilder();
if (!string.IsNullOrEmpty(message))
{
sb.AppendFormat("<span>{0}</span>{1}", helper.Encode(message), System.Environment.NewLine);
}
sb.AppendLine("<div class=\"validation-summary-errors\" data-valmsg-summary=\"true\">");
sb.AppendLine("\t<ul>");
int count = 0;
foreach (var key in helper.ViewData.ModelState.Keys)
{
foreach (var err in helper.ViewData.ModelState[key].Errors)
{
count++;
sb.AppendFormat("\t\t<li>{0}</li>{1}", helper.Encode(err.ErrorMessage),System.Environment.NewLine);
if (count >= RVConstants.MaximumValidationErrors)
{
sb.AppendFormat("\t\t<li>Maximum of {0} errors shown</li>{1}",
maximumValidations,
System.Environment.NewLine);
break;
}
}
if (count >= maximumValidations)
break;
}
return sb.ToString();
}
答案 0 :(得分:0)
我最终利用现有的验证摘要。以下是我提出的建议:
public static MvcHtmlString ValidationSummaryLimited(this HtmlHelper helper,
bool excludePropertyErrors)
{
MvcHtmlString result = helper.ValidationSummary(excludePropertyErrors);
return LimitSummaryResults(result);
}
private static MvcHtmlString LimitSummaryResults(MvcHtmlString summary)
{
if (summary == null || summary.ToString() == string.Empty)
return summary;
int maximumValidations = RVConstants.MaximumValidationErrors;
Regex exp = new Regex(@"<li[^>]*>[^<]*</li>",RegexOptions.IgnoreCase);
string htmlString = summary.ToHtmlString();
MatchCollection matches = exp.Matches(htmlString);
if (matches.Count > maximumValidations)
{
string header = htmlString.Substring(0, htmlString.IndexOf("<ul>",StringComparison.Ordinal) + "<ul>".Length);
string footer = htmlString.Substring(htmlString.IndexOf("</ul>", StringComparison.Ordinal));
StringBuilder sb = new StringBuilder(htmlString.Length);
sb.Append(header);
for (int i = 0; i < maximumValidations; i++)
{
sb.Append(matches[i].Value);
}
sb.AppendFormat("<li>Maximum of {0} errors shown</li>", maximumValidations);
sb.Append(footer);
string limited = sb.ToString();
return new MvcHtmlString(limited);
}
return summary;
}