我有一个MVC appilcation,其模型使用[Required]
属性作为字段。当此属性的验证失败时,我想在错误消息中显示一个超链接。
当我添加<a href="link">link</a>
时,链接的文本将显示在错误消息中。如何在使用Html.ValidationMesssageFor(model=>model.attibute)
?
我正在使用Razor视图引擎。
我们可以在错误消息中添加任何样式以显示超链接。
答案 0 :(得分:1)
在解决方案的某处创建一个类似以下的扩展方法:
using System.Web;
namespace MvcApplication.Extensions
{
public static class HtmlStringExtensions
{
public static IHtmlString Raw(this IHtmlString htmlString)
{
return new HtmlString(HttpUtility.HtmlDecode(htmlString.ToString()));
}
}
}
然后,在每个视图中添加以下using语句:
@using MvcApplication.Extensions
或者您可以将以下内容添加到您的web.config
<pages>
<namespaces>
<add namespace="MvcApplication.Extensions" />
</namespaces>
</pages>
完成这两个步骤后,您可以通过将ValidationMessageFor()调用更改为:
来获取未编码的html字符串,就像您正在寻找的一样。Html.ValidationMesssageFor(model=>model.attibute).Raw()
答案 1 :(得分:0)
验证文本在ValidationSumary或ValidationFor等之前编码......
你只需要解码html,然后创建一个MvcHtmlString ......
例如:
@HttpUtility.HtmlDecode(Html.ValidationSummary().ToString()).ToMvcHtmlString()
这是我制作MvcHtmlString的扩展名:
namespace System
{
public static class StringExtension
{
public static System.Web.Mvc.MvcHtmlString ToMvcHtmlString(this string value)
{
return System.Web.Mvc.MvcHtmlString.Create(value);
}
}
}
或者如果您打算重复使用它,则可以创建HtmlHelper:
namespace System.Web.Mvc.Html
{
public static class FormHelper
{
public static MvcHtmlString ValidationSummaryEx(this HtmlHelper htmlHelper, bool excludePropertyErrors)
{
var original = htmlHelper.ValidationSummary(excludePropertyErrors);
var decoded = HttpUtility.HtmlDecode(original.ToString());
return decoded.ToMvcHtmlString();
}
}
}
希望它能帮助您或未来的观众。 注意:它适用于所有验证摘要和验证...