html.validationsummary 样式,如何显示html元素,如通过Html.ValidationSummary()呈现的错误中的链接...

当前用于显示错误消息的HTML帮助程序不支持此操作。但是,您可以编写自己的HTML助手来显示错误消息,而不用HTML转义它,即他们会将错误消息视为原始HTML。

作为一个起点,你可以使用从Codeplex上的ASP.NET MVC的源代码,特别是ValidationExtensions类的ValidationSummary方法:

public static string ValidationSummary(this HtmlHelper htmlHelper, string message, IDictionary htmlAttributes) {

// Nothing to do if there aren't any errors

if (htmlHelper.ViewData.ModelState.IsValid) {

return null;

}

string messageSpan;

if (!String.IsNullOrEmpty(message)) {

TagBuilder spanTag = new TagBuilder("span");

spanTag.MergeAttributes(htmlAttributes);

spanTag.MergeAttribute("class", HtmlHelper.ValidationSummaryCssClassName);

spanTag.SetInnerText(message);

messageSpan = spanTag.ToString(TagRenderMode.Normal) + Environment.NewLine;

}

else {

messageSpan = null;

}

StringBuilder htmlSummary = new StringBuilder();

TagBuilder unorderedList = new TagBuilder("ul");

unorderedList.MergeAttributes(htmlAttributes);

unorderedList.MergeAttribute("class", HtmlHelper.ValidationSummaryCssClassName);

foreach (ModelState modelState in htmlHelper.ViewData.ModelState.Values) {

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));

}

}

}

unorderedList.InnerHtml = htmlSummary.ToString();

return messageSpan + unorderedList.ToString(TagRenderMode.Normal);

}

然后,您可以更改此方法对待错误消息原始HTML。

两个警告,虽然:

你改变ModelState类的某些属性的含义。尽管现在您不再使用自己的HTML助手,但未来版本的ASP.NET MVC可能会引入不再适用于此方法的更改。

请务必小心,不要使用未正确转义的错误消息,以免您的Web应用程序暴露给XSS攻击。某些标准验证注释可能无法再工作,因为它们不会HTML转义错误消息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值