gpt4 book ai didi

asp.net-mvc-3 - MVC3 - 将 NEW-LINE 传递给 ModelState.AddModelError

转载 作者:行者123 更新时间:2023-12-01 19:16:53 24 4
gpt4 key购买 nike

当后端发生错误时,MVC Controller 通过
返回消息 ModelState.AddModelError("", "message");

我希望该“消息”以 2 行显示,因此我想添加一个 "\r\n"
"<br />" 介于两者之间。

我正在使用 Razor 使用 @Html.ValidationSummary(); 显示消息
但 View 的 HTML 输出将其显示为 &lt;br/&gt;

在消息上传递换行符并将其解释为 HTML 输出级别的真实
标记的最佳方法是什么?

==================================
Controller 代码:

ModelState.AddModelError("", "Line one <br /> Line two.");
return Request.IsAjaxRequest() ? (ActionResult) PartialView("ViewName", model)
: View(model);

查看代码:

@using (Ajax.BeginForm("Index", "Home", new AjaxOptions { UpdateTargetId = "tv" })) 
{
@if (Html.ValidationSummary() != null)
@Html.Raw(Server.HtmlDecode(Html.ValidationSummary(true).ToString()))

....
}

最佳答案

ValidationSummary 帮助程序 HTML 对错误消息进行编码,这是设计使然。这意味着您不能使用 HTML 标签,因为它们将被编码。所以你可以编写一个不编码的自定义助手:

public static class ValidationExtensions
{
public static IHtmlString MyValidationSummary(this HtmlHelper htmlHelper)
{
var formContextForClientValidation = htmlHelper.ViewContext.ClientValidationEnabled ? htmlHelper.ViewContext.FormContext : null;
if (htmlHelper.ViewData.ModelState.IsValid)
{
if (formContextForClientValidation == null)
{
return null;
}
if (htmlHelper.ViewContext.UnobtrusiveJavaScriptEnabled)
{
return null;
}
}

var stringBuilder = new StringBuilder();
var ulBuilder = new TagBuilder("ul");

ModelState modelState;
if (htmlHelper.ViewData.ModelState.TryGetValue(htmlHelper.ViewData.TemplateInfo.HtmlFieldPrefix, out modelState))
{
foreach (ModelError error in modelState.Errors)
{
string userErrorMessageOrDefault = error.ErrorMessage;
if (!string.IsNullOrEmpty(userErrorMessageOrDefault))
{
var liBuilder = new TagBuilder("li");
liBuilder.InnerHtml = userErrorMessageOrDefault;
stringBuilder.AppendLine(liBuilder.ToString(TagRenderMode.Normal));
}
}
}

if (stringBuilder.Length == 0)
{
stringBuilder.AppendLine("<li style=\"display:none\"></li>");
}
ulBuilder.InnerHtml = stringBuilder.ToString();

TagBuilder divBuilder = new TagBuilder("div");
divBuilder.AddCssClass(htmlHelper.ViewData.ModelState.IsValid ? HtmlHelper.ValidationSummaryValidCssClassName : HtmlHelper.ValidationSummaryCssClassName);
divBuilder.InnerHtml = ulBuilder.ToString(TagRenderMode.Normal);
if (formContextForClientValidation != null)
{
if (!htmlHelper.ViewContext.UnobtrusiveJavaScriptEnabled)
{
divBuilder.GenerateId("validationSummary");
formContextForClientValidation.ValidationSummaryId = divBuilder.Attributes["id"];
formContextForClientValidation.ReplaceValidationSummary = false;
}
}
return new HtmlString(divBuilder.ToString(TagRenderMode.Normal));
}
}

然后:

@Html.MyValidationSummary()

我们的自定义帮助程序中的以下行明确不进行 HTML 编码:

liBuilder.InnerHtml = userErrorMessageOrDefault;

在原来的助手中,它看起来像这样:

liBuilder.SetInnerText(userErrorMessageOrDefault);

关于asp.net-mvc-3 - MVC3 - 将 NEW-LINE 传递给 ModelState.AddModelError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8156545/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com