【问题标题】:Using html in ErrorMessage property of data annotations在数据注释的 ErrorMessage 属性中使用 html
【发布时间】:2012-08-08 19:11:26
【问题描述】:

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

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 =&gt; model.SchoolID) 编码HTML?也许我需要为此制作一个自定义助手扩展?有没有更简单的方法?任何指导将不胜感激。如果辅助扩展是要走的路,我如何访问辅助扩展方法中的验证规则以确保 html 不会被编码?

谢谢。

【问题讨论】:

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


    【解决方案1】:

    根据您需要使用它的频率,您可以在验证消息上使用HttpUtility.HtmlDecode 方法。

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

    更可重用但需要更多前期时间的方法是创建您自己的返回非 html 编码字符串的 html 帮助程序(可能称为 HtmlValidationMessageFor())。

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

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

    但是我找不到一个可靠的理由来解释为什么不应该再次对其进行编码,除非它可能是一个双重编码的字符串。

    【讨论】:

    • 我在使用 MvcHtmlString.Create() 时实际上使用了 HTML,它在没有编码的情况下输出到视图,到目前为止效果很好。我认为这就是重点,因为这就是标准辅助方法通过生成 html 并通过 MvcHtmlString 输出它的工作方式。真的,现在的问题是如何从辅助扩展方法中获取 Range 属性 ErrorMessage 文本并将其重新创建为 MvcHtmlString?
    【解决方案2】:

    我进行了更多搜索,发现下面的 SO 帖子解决了我的要求。我在此处添加了该答案,以防将来有人遇到此问题。我也会将此标记为答案,因为它最接近我正在寻找的最佳答案,但我会让版主决定是否需要将其作为副本关闭。

    Render HTML tags inside of HTML.ValidationMessageFor in MVC3

    【讨论】:

      【解决方案3】:

      我只是需要一个解决方法来处理一条错误消息。所以一个简单的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>");
                  }
             });
          });
      

      干杯!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-03-28
        • 1970-01-01
        • 2015-03-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-09
        • 1970-01-01
        相关资源
        最近更新 更多