private static string GetSummary(HtmlHelper htmlHelper) { var viewContext = htmlHelper.ViewContext; System.Web.Mvc.FormContext formContext = viewContext.ClientValidationEnabled ? viewContext.FormContext : null; if (htmlHelper.ViewData.ModelState.IsValid && formContext == null) { return(null); } var modelState = GetModelStateList(htmlHelper); StringBuilder listBuilder = new StringBuilder(); foreach (var state in modelState) { foreach (var error in state.Value.Errors) { string message = error.ErrorMessage; if (!string.IsNullOrWhiteSpace(message)) { listBuilder.Append("<li>"); string key = state.Key; if (!string.IsNullOrWhiteSpace(key) && !message.Contains(key)) { int lastDot = key.LastIndexOf('.'); if (lastDot != -1) { string suffix = key.Substring(lastDot + 1); if (message.Contains(suffix)) { key = key.Substring(0, lastDot); } } listBuilder.Append("<strong>"); listBuilder.Append(key.Replace('.', ' ').ToWords(true)); listBuilder.Append("</strong> "); } listBuilder.Append(message); listBuilder.AppendLine("</li>"); } } } if (listBuilder.Length == 0) { if (viewContext.UnobtrusiveJavaScriptEnabled || formContext == null) { return(null); } listBuilder.AppendLine("<li style=\"display:none\"></li>"); } var listTag = new HtmlTagBuilder("ul") { InnerHtml = listBuilder.ToString() }; var divBuilder = new HtmlTagBuilder("div"); divBuilder.AddCssClass(htmlHelper.ViewData.ModelState.IsValid ? HtmlHelper.ValidationSummaryValidCssClassName : HtmlHelper.ValidationSummaryCssClassName); divBuilder.AddCssClass("alert alert-danger fade in"); if (formContext != null) { if (viewContext.UnobtrusiveJavaScriptEnabled) { divBuilder.MergeAttribute("data-valmsg-summary", "true"); } else { divBuilder.GenerateId("validationSummary"); formContext.ValidationSummaryId = divBuilder.Attributes["id"]; formContext.ReplaceValidationSummary = true; } } divBuilder.InnerHtml = "<button type='button' class='close' data-dismiss='alert' aria-hidden='true'>×</button>" + listTag.ToString(); return(divBuilder.ToString()); }