是否可以在验证摘要消息中放置HTML链接?例如,我想在有验证错误的情况下将链接放到另一个页面:
@Html.ValidationSummary(False, "read <a href=""anotherpage.html"">more</a>")
或
@Html.ValidationSummary(False, "read " &
Html.ActionLink("more", "helpforerror").ToHtmlString)
但是在浏览器中,标签被转义,因此它不会形成链接。
答案 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
答案 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建议的非常类似,只是不需要扩展名。