加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-16 07:44:28 所属栏目:asp.Net 来源:网络整理
导读:我正在尝试在MVC3中输出包含链接的验证消息. 我正在输出这样的错误消息占位符 @Html.ValidationMessageFor(model = model.Email) 问题是,错误消息是html转义,大多数情况下很好,但我想要一个链接在中间. span class="field-validation-error" data-valmsg-for
我正在尝试在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))

解决方法

以@ BrunoLM为首,以下扩展方法应该能满足您的需求.我只对此进行了基本测试,但确实有效.

public static class HtmlHelperExtensions
{
    private static readonly string htmlErrorPlaceholder = "##__html#Error#Placeholder__##";

    public static IHtmlString HtmlValidationMessageFor<TModel,TProperty>(
        this HtmlHelper<TModel> htmlHelper,Expression<Func<TModel,TProperty>> expression,object htmlAttributes)
        {
            var name      = expression.GetMemberName();
            var isInError = htmlHelper.ViewContext.ViewData.ModelState.ContainsKey(name);
            var message   = htmlHelper.ValidationMessageFor(expression,htmlErrorPlaceholder,htmlAttributes);
            if (isInError && !MvcHtmlString.IsNullOrEmpty(message))
            {
                var realError = htmlHelper.ViewContext.ViewData.ModelState[name].Errors.First().ErrorMessage;
                return htmlHelper.Raw(message.ToString().Replace(htmlErrorPlaceholder,realError));
            }

            return MvcHtmlString.Empty;
        }
}

public static class Expression_1Extensions
{
    public static string GetMemberName<TModel,TProperty>(this Expression<Func<TModel,TProperty>> expression)
    {
        switch (expression.Body.NodeType)
        {
            case ExpressionType.MemberAccess:
                MemberExpression memberExpression = (MemberExpression)expression.Body;
                return memberExpression.Member is PropertyInfo ? memberExpression.Member.Name : null;
        }

        throw new NotSupportedException();
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读