在数据注释的ErrorMessage属性中使用html

时间:2012-08-08 19:11:27

标签: c# asp.net-mvc-3 data-annotations

任何人都知道是否可以执行以下操作:

public class User
{
    public Guid UserID { get; set; }

    [Required(ErrorMessage="A school selection is required.")]
    [Range(1, int.MaxValue, ErrorMessage="School not found.  Please contact support at <a href='mailto:support@mysite.com'>support@mysite.com</a>")]
    public int SchoolID { get; set; }

    // ... other properties
}

没有@Html.ValidationMessageFor(model => model.SchoolID)对HTML进行编码?也许我需要为此制作一个自定义助手扩展?有没有更简单的方法?任何指导将不胜感激。如果要使用辅助扩展,我怎样才能访问辅助扩展方法中的验证规则以确保html不被编码?

感谢。

3 个答案:

答案 0 :(得分:0)

根据您需要使用此频率的频率,您可以在验证邮件上使用HttpUtility.HtmlDecode方法。

@{HttpUtility.HtmlDecode(Html.ValidationMessageFor(x=>x.SchoolId).ToString)}

更可重用,但更多的前期时间涉及方法是创建自己的html帮助器(可能称为HtmlValidationMessageFor()),它返回一个非html编码的字符串。

话虽如此,ValidationMessageFor函数的返回类型是MvcHtmlString,表明它是

  

表示不应再次编码的HTML编码字符串。

但我找不到一个可靠的理由,为什么不应该再次编码,除了它可能是一个双重编码的字符串。

答案 1 :(得分:0)

我做了一些搜索,发现下面的SO帖子解决了如何做我要问的问题。我已经在这里添加了答案,以防将来有人遇到这个问题。我将把这个标记作为答案,因为它最接近我正在寻找的最佳答案,但我会让主持人决定是否需要将其作为副本关闭。

Render HTML tags inside of HTML.ValidationMessageFor in MVC3

答案 2 :(得分:0)

我只需要一个错误消息的解决方法。所以简单的jquery绕道而行;

 <script>
    $(document).ready(function() {
       $('.validation-summary-errors ul li').each(function(){
            if($(this).html() == "School not found"){
                $(this).html("School not found.  Please contact support at <a href='mailto:support@mysite.com'>support@mysite.com</a>");
            }
       });
    });

干杯!