예제 #1
0
        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'>&times;</button>"
                                   + listTag.ToString();

            return(divBuilder.ToString());
        }