8

是否可以在验证摘要消息中放置 HTML 链接?例如,如果出现验证错误,我想放置一个指向另一个页面的链接:

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

或者

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

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

4

6 回答 6

6

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

您需要在验证消息中添加一个{0}类型格式项,如下所示,它将被您的链接替换。

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);
}
于 2012-09-05T08:05:01.913 回答
4

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

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

这是受类似问题的回答启发的。

于 2012-06-07T02:24:58.773 回答
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();
        }
    }
}

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

于 2014-07-08T17:40:46.837 回答
2

不,默认行为不允许这样做,但您可以自己制作。这就是你需要的:validationsummary 中的 Html raw

于 2012-06-06T04:00:31.747 回答
0

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

<div id="divToUpdate">

</div>

$('form').submit(function(){
   if(!this.valid())
       $('#divToUpdate').html("read <a href='anotherpage.html'>more</a>"); 
});
于 2012-06-06T12:53:16.590 回答
0

如果您要在 ModelStateError 中发回 HTML,则可以使用这一行:

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

这与@Benoit 的建议非常相似,只是不需要扩展。

于 2017-03-20T17:02:29.177 回答