asp.net-mvc - 如何在验证摘要中添加图像以及错误消息?

标签 asp.net-mvc modelstate validationsummary

我想在验证摘要中显示带有成功图像(绿色勾号)和失败图像(红色警告)的错误消息。这个怎么做。 并且我验证摘要我将不得不以粗体、斜体等显示一些文本。为此我尝试像这样传递字符串。

inValid <b>username</b> or <b>password</b>

但是在页面中它的呈现是这样的。它没有以粗体显示用户名和密码。有什么办法可以做到这一点。我在 Controller 中收到此验证错误消息并将其添加到 ModelState.add(error);

最佳答案

ValidationSummary 助手 HTML 默认对所有消息进行编码。您可以编写一个不进行 HTML 编码的自定义帮助程序:

public static class HtmlExtensions
{
    public static MvcHtmlString MyValidationSummary(this HtmlHelper htmlHelper, bool excludePropertyErrors, string message)
    {
        var formContext = htmlHelper.ViewContext.ClientValidationEnabled ? htmlHelper.ViewContext.FormContext : null;
        if (formContext == null && htmlHelper.ViewData.ModelState.IsValid)
        {
            return null;
        }

        string messageSpan;
        if (!string.IsNullOrEmpty(message))
        {
            TagBuilder spanTag = new TagBuilder("span");
            spanTag.InnerHtml = message;
            messageSpan = spanTag.ToString(TagRenderMode.Normal) + Environment.NewLine;
        }
        else
        {
            messageSpan = null;
        }

        var htmlSummary = new StringBuilder();
        var unorderedList = new TagBuilder("ul");

        IEnumerable<ModelState> modelStates = null;
        if (excludePropertyErrors)
        {
            ModelState ms;
            htmlHelper.ViewData.ModelState.TryGetValue(htmlHelper.ViewData.TemplateInfo.HtmlFieldPrefix, out ms);
            if (ms != null)
            {
                modelStates = new ModelState[] { ms };
            }
        }
        else
        {
            modelStates = htmlHelper.ViewData.ModelState.Values;
        }

        if (modelStates != null)
        {
            foreach (ModelState modelState in modelStates)
            {
                foreach (ModelError modelError in modelState.Errors)
                {
                    var errorText = modelError.ErrorMessage;
                    if (!String.IsNullOrEmpty(errorText))
                    {
                        var listItem = new TagBuilder("li");
                        listItem.InnerHtml = errorText;
                        htmlSummary.AppendLine(listItem.ToString(TagRenderMode.Normal));
                    }
                }
            }
        }

        if (htmlSummary.Length == 0)
        {
            htmlSummary.AppendLine(@"<li style=""display:none""></li>");
        }

        unorderedList.InnerHtml = htmlSummary.ToString();

        var divBuilder = new TagBuilder("div");
        divBuilder.AddCssClass((htmlHelper.ViewData.ModelState.IsValid) ? HtmlHelper.ValidationSummaryValidCssClassName : HtmlHelper.ValidationSummaryCssClassName);
        divBuilder.InnerHtml = messageSpan + unorderedList.ToString(TagRenderMode.Normal);

        if (formContext != null)
        {
            // client val summaries need an ID
            divBuilder.GenerateId("validationSummary");
            formContext.ValidationSummaryId = divBuilder.Attributes["id"];
            formContext.ReplaceValidationSummary = !excludePropertyErrors;
        }
        return MvcHtmlString.Create(divBuilder.ToString(TagRenderMode.Normal));
    }
}

现在您可以在验证消息中使用 HTML 标签:

ModelState.AddModelError("user", "invalid <b>username</b> or <b>password</b>");

然后:

<%= Html.MyValidationSummary(true, null) %>

显然,通过这样做,您应该确保您的错误消息包含有效的 HTML 结构。

关于asp.net-mvc - 如何在验证摘要中添加图像以及错误消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6659683/

相关文章:

html - DOM 找到 2 个具有非唯一 ID #idName 的元素

c# - 找不到路径 '/apple-touch-icon-120x120-precomposed.png' 的 Controller

c# - 使用自定义验证属性进行模型验证

c# - 覆盖 ModelState 非常技术性的错误消息

asp.net - 使CustomValidator与ValidationSummary消息框配合使用的优雅方法

javascript - 验证摘要消息弹出两次

c# - 具有多个存储库和服务的 .NET MVC Controller ?

html - 在一个页面中无冗余地添加具有样式的多个 WebGrid

c# - 如何将 Modelstate 错误键设置为驼峰式大小写?

javascript - 将错误消息添加到 javascript 的验证摘要中