簡體   English   中英

如何通過C#在Html.ValidationSummary()中獲取HTML或換行符/回車符?

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

如果不編寫一些我不打算這樣做的瘋狂擴展方法,這可能是不可能的。 我知道ValidationSummary()是為安全而編碼的。 我只是想知道我是否缺少明顯的東西 ...?

我的表單中有一個簡單的<%= Html.ValidationSummary() %> 在某些情況下,會引發錯誤,如果我可以對錯誤的出現有更多的控制,那就太好了。

例如,當我導入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");

如果可以在列表中顯示多個標頭,如下所示

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

這將顯示HTML。 即使我可以在此處或此處輸入換行符,也會有所幫助(\\ n \\ r) ...我只是不了解某些內容嗎?

換行符在HTML中無效,您需要一個<br />標簽。

您總是可以自己滾動來獲得對輸出的更多控制。 這是該幫助器的MVC2源。 它基本上通過

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是“ validation-summary-errors”,而ValidationSummaryValidCssClassName是“ validation-summary-valid”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM