简体   繁体   English

如何通过C#在Html.ValidationSummary()中获取HTML或换行符/回车符?

[英]How do I get HTML or New Line / Carraige Return in Html.ValidationSummary() via C#?

This may not be possible without writing some crazy extension method which I do not plan on doing. 如果不编写一些我不打算这样做的疯狂扩展方法,这可能是不可能的。 I know the ValidationSummary() is encoded for security. 我知道ValidationSummary()是为安全而编码的。 I'm just curious if I'm missing something obvious...? 我只是想知道我是否缺少明显的东西 ...?

I have a simple <%= Html.ValidationSummary() %> in my form. 我的表单中有一个简单的<%= Html.ValidationSummary() %> For certain situations, errors are thrown and it would be nice if I could have a little more control over the appearance of the error(s). 在某些情况下,会引发错误,如果我可以对错误的出现有更多的控制,那就太好了。

For example - when I import a CSV file, I throw the following error to the ValidationSummary() if the headers are not in an acceptable format or include special characters: 例如,当我导入CSV文件时,如果标头的格式不正确或包含特殊字符,则会向ValidationSummary()抛出以下错误:

constraintValidatorContext.AddInvalid(invalidHeaders.Count() == 1
                        ? string.Format("The following column header is invalid: {0}.", badHeaders)
                        : string.Format("There were multiple invalid column headers including: {0}.", badHeaders), "General");

It would be swell if I could display the multiple headers in a list as follows : 如果可以在列表中显示多个标头,如下所示

string.Format("There were multiple invalid column headers including: <li>{0}</li>", badHeaders)

This displays the HTML. 这将显示HTML。 Even if I could just throw in a NewLine here or there, it would be helpful (\\n \\r) ... Am I just ignorant of something? 即使我可以在此处或此处输入换行符,也会有所帮助(\\ n \\ r) ...我只是不了解某些内容吗?

Newlines have no effect in HTML, you want a <br /> tag. 换行符在HTML中无效,您需要一个<br />标签。

You could always roll your own to get more control over the output. 您总是可以自己滚动来获得对输出的更多控制。 Here's the MVC2 source for that helper. 这是该帮助器的MVC2源。 It basically looks through the 它基本上通过

public static MvcHtmlString ValidationSummary(this HtmlHelper htmlHelper, bool excludePropertyErrors, string message, IDictionary<string, object> htmlAttributes) {
        if (htmlHelper == null) {
            throw new ArgumentNullException("htmlHelper");
        }

        FormContext formContext = htmlHelper.ViewContext.GetFormContextForClientValidation();
        if (formContext == null && htmlHelper.ViewData.ModelState.IsValid) {
            return null;
        }

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

        StringBuilder htmlSummary = new StringBuilder();
        TagBuilder 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) {
                    string errorText = GetUserErrorMessageOrDefault(htmlHelper.ViewContext.HttpContext, modelError, null /* modelState */);
                    if (!String.IsNullOrEmpty(errorText)) {
                        TagBuilder listItem = new TagBuilder("li");
                        listItem.SetInnerText(errorText);
                        htmlSummary.AppendLine(listItem.ToString(TagRenderMode.Normal));
                    }
                }
            }
        }

        if (htmlSummary.Length == 0) {
            htmlSummary.AppendLine(_hiddenListItem);
        }

        unorderedList.InnerHtml = htmlSummary.ToString();

        TagBuilder divBuilder = new TagBuilder("div");
        divBuilder.MergeAttributes(htmlAttributes);
        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 divBuilder.ToMvcHtmlString(TagRenderMode.Normal);
    }

ValidationSummaryValidCssClassName is "validation-summary-errors" and ValidationSummaryValidCssClassName is "validation-summary-valid". ValidationSummaryValidCssClassName是“ validation-summary-errors”,而ValidationSummaryValidCssClassName是“ validation-summary-valid”。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 C#MVC Razor Html.ValidationSummary将消息显示为HTML - C# MVC Razor Html.ValidationSummary show message as HTML 如何将reCAPTCHA验证失败添加到@html.ValidationSummary列表中 - How do I add reCAPTCHA validation failure into the @html.ValidationSummary list 自定义@ Html.ValidationSummary excludePropertyErrors - Custom @Html.ValidationSummary excludePropertyErrors Html.ValidationSummary始终显示 - Html.ValidationSummary always showing @ Html.ValidationSummary在错误的页面上工作 - @Html.ValidationSummary works on wrong page Html.ValidationSummary中不显示自定义验证错误消息 - Custom validation error message doesn't display in Html.ValidationSummary 通过帮助程序方法动态调用Html.ValidationSummary()时出现KeyNotFound异常 - KeyNotFound Exception when calling Html.ValidationSummary() dynamically through helper method 如何在 .NET (C#) 中获取 UserControl 的 HTML 输出? - How do I get the HTML output of a UserControl in .NET (C#)? Html.ValidationSummary未填充自定义错误ASP.NET MVC剃刀页 - Html.ValidationSummary Not Populating with Custom Errors ASP.NET MVC Razor Page @ Html.ValidationSummary(true,“请修复错误”)不显示“请修复错误”消息 - @Html.ValidationSummary(true, “Please fix errors”) not displaying “Please fix errors” message
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM