链接验证摘要消息

时间:2012-06-06 03:44:26

标签: asp.net-mvc-3 razor

是否可以在验证摘要消息中放置HTML链接?例如,我想在有验证错误的情况下将链接放到另一个页面:

@Html.ValidationSummary(False, "read <a href=""anotherpage.html"">more</a>")

@Html.ValidationSummary(False, "read " &
    Html.ActionLink("more", "helpforerror").ToHtmlString)

但是在浏览器中,标签被转义,因此它不会形成链接。

6 个答案:

答案 0 :(得分:6)

我知道您已经接受了答案,但我认为我的解决方案更简单,如果您想要添加现有验证摘要的链接,则需要更少的重写。

您需要在验证邮件中添加{0}类型format item,如下所示,该链接将替换为您的链接。

ModelState.AddModelError("", "Some error message with a link here {0}.");

然后在您的视图中调用您的验证摘要,如下所示:

@string.Format(Html.ValidationSummary().ToString(), Html.ActionLink("Click Here", "Action_To_Link_To")).ToHtmlString()

在这种情况下,我使用了我添加到字符串对象.ToHtmlString()的扩展方法,它基本上只是将字符串转换为HtmlString,以防止任何标记被转义。它看起来像这样:

public static HtmlString ToHtmlString(this String str)
{
    return new HtmlString(str);
}

答案 1 :(得分:4)

验证文本在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();
        }
    }
}

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

答案 2 :(得分:3)

最后我选择了另一种方法:在验证摘要之外创建一个包含链接等的div,并仅在modelstate无效时添加div:

@If Not ViewData.ModelState.IsValid Then
    @<div>read <a href="anotherpage.html">more</a></div>
End If

这受an answer to similar question启发。

答案 3 :(得分:2)

不,默认行为不允许,但您可以创建自己的行为。这就是您所需要的:Html raw in validationsummary

答案 4 :(得分:0)

您可以通过jquery检查表单是否有效,并使用链接文本更新div:

<div id="divToUpdate">

</div>

$('form').submit(function(){
   if(!this.valid())
       $('#divToUpdate').html("read <a href='anotherpage.html'>more</a>"); 
});

答案 5 :(得分:0)

如果你在ModelStateError中发送回HTML,你可以使用这个内容:

@Html.Raw(HttpUtility.HtmlDecode(Html.ValidationSummary().ToHtmlString()))

它与@Benoit建议的非常类似,只是不需要扩展名。