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