我有一个 MVC 应用程序,其模型使用[Required]
字段的属性。当此属性的验证失败时,我想在错误消息中显示一个超链接。
当我添加<a href="link">link</a>
时,链接的文本显示为错误消息中的原样。如何在使用 ? 显示的错误消息中显示链接Html.ValidationMesssageFor(model=>model.attibute)
?
我正在使用 Razor 视图引擎。
我们可以在错误消息中添加任何样式以显示超链接。
我有一个 MVC 应用程序,其模型使用[Required]
字段的属性。当此属性的验证失败时,我想在错误消息中显示一个超链接。
当我添加<a href="link">link</a>
时,链接的文本显示为错误消息中的原样。如何在使用 ? 显示的错误消息中显示链接Html.ValidationMesssageFor(model=>model.attibute)
?
我正在使用 Razor 视图引擎。
我们可以在错误消息中添加任何样式以显示超链接。
在解决方案的某处创建如下所示的扩展方法:
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.ValidationMesssageFor(model=>model.attibute).Raw()
验证文本在 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 ...