使用mvc3中的客户端验证在错误消息中添加html文本

时间:2011-06-02 14:10:36

标签: html asp.net-mvc razor client-side-validation

我有一个MVC appilcation,其模型使用[Required]属性作为字段。当此属性的验证失败时,我想在错误消息中显示一个超链接。

当我添加<a href="link">link</a>时,链接的文本将显示在错误消息中。如何在使用Html.ValidationMesssageFor(model=>model.attibute)

显示的错误消息中显示链接

我正在使用Razor视图引擎。

我们可以在错误消息中添加任何样式以显示超链接。

2 个答案:

答案 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();
        }
    }
}

希望它能帮助您或未来的观众。 注意:它适用于所有验证摘要和验证...