asp.net-mvc - 如何防止 MVC3 html 转义我的验证消息?

标签 asp.net-mvc

我正在尝试在包含链接的 MVC3 中输出验证消息。

我正在输出这样的错误消息占位符

@Html.ValidationMessageFor(model => model.Email)

问题是,错误消息是 html 转义的,这在大多数情况下都很好,但我希望中间有一个链接。
<span class="field-validation-error" data-valmsg-for="Email" data-valmsg-replace="true">This e-mail address is already registed. &lt;a href=&quot;%url_token%&quot;&gt;Click here to reset.&lt;/a&gt;</span>

我该如何防止这种情况发生?

这可行,但不是解决方案,而是临时解决方法。
@{
  string s = Html.ValidationMessageFor(model => model.Email).ToString();
}
@Html.Raw(HttpUtility.HtmlDecode(s))

最佳答案

用反射器查看代码似乎没有方法,更完整的重载是:

public static MvcHtmlString ValidationMessageFor<TModel, TProperty>(
    this HtmlHelper<TModel> htmlHelper,
    Expression<Func<TModel, TProperty>> expression,
    string validationMessage,
    object htmlAttributes)
{
    return htmlHelper.ValidationMessageFor<TModel, TProperty>(expression, validationMessage, ((IDictionary<string, object>) HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes)));
}

但是,您可以做的是创建一个扩展方法,该方法可以根据需要返回字符串,如下所示:
public static class ValidationExtender
{
    public static IHtmlString HtmlValidationMessageFor<TModel, TProperty>(
        this HtmlHelper<TModel> htmlHelper,
        Expression<Func<TModel, TProperty>> expression)
    {
        return MvcHtmlString.Create(htmlHelper.ValidationMessageFor(expression).ToHtmlString());
    }
}

您可以使用 MvcHtmlString .见 MvcHtmlString.Create() .它将输出html而不转义。

关于asp.net-mvc - 如何防止 MVC3 html 转义我的验证消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6385402/

相关文章:

c# - 我应该在 Model 还是 viewModel 中放置 "required"数据注释?

javascript - 为什么 'response' 在当前上下文中不可用?

jquery - 为当前菜单设置 css 事件类

asp.net-mvc - 从 ApiController 返回 JSON 流

c# - IUserStore[Models.ApplicationUser] 不是通过 Unity Interface to Class 解析的,而是通过 InjectionConstructor 解析的

c# - 如何在 _Layout.cshtml 中检索身份声明值

asp.net-mvc - 即使我可以访问 ASP.NET 4.5 中的数据库,查询也不会返回任何数据

c# - 获取 List<T> 中变量的 List<string>

javascript - Asp.net MVC 页面上的多个(相同的)部分 View ,部分 View 内带有 &lt;script&gt; 标记

asp.net-mvc - Asp.net mvc & 如何将 jquery 函数应用于动态控件