Resx中的HtmlTags显示在@ Html.ValidationMessageFor中

时间:2012-04-04 09:47:57

标签: asp.net-mvc-3 razor resources mvchtmlstring

我有以下疑问。我正在考虑在我的resx文本中使用html标签进行本地化的选项。 当我直接放入资源时,我可以诉诸:

@Html.Raw(@Resources.ResourcesFM.Error_Email)

它按预期工作。 问题是当来自htmlhelper的验证消息调用资源时:

@Html.ValidationMessageFor(model => model.Email)

来自attibute:

[DataType(DataType.EmailAddress,
ErrorMessageResourceType = typeof(ResourcesFM),
ErrorMessageResourceName = "ErrorMailIncorr")]

我在尝试什么......

@Html.Raw(Html.ValidationMessageFor(model => model.Email))

我不知道如何获得与使用@html.Raw时相同的结果,因为帮助器的输出是MvcHtmlString ......

由于

3 个答案:

答案 0 :(得分:3)

试试这个:

查看:

@Html.Raw(Server.HtmlDecode(@Html.ValidationMessageFor(m => m.UserName).ToString()))

控制器操作:

ModelState.AddModelError("UserName", "This is a link <a href='http://example.com'>Google Home</a>");

答案 1 :(得分:0)

Html.ValidationMessageFor对消息进行html编码。但是你应该能够简单地在结果上调用HttpUtility.HtmlDecode()。即使结果包含html标签和诸如此类的东西,解码也只是在字符串的那一部分没有操作。

所以如果`Html.ValidationMessageFor(...)&#39;返回

<span>&lt;div&gt;This is in a div&lt;/div<&gt;</span>

然后HttpUtility.HtmlDecode(Html.ValidationMessageFor(...).ToString())会给你

<span><div>This is in a div</div></span>

它不漂亮,但它有效。您可以选择重新创建自己的Validation助手版本,该版本永远不会对邮件进行编码。

答案 2 :(得分:0)

对于本地化,您可以使用String.Format并为链接选择合适的占位符

ModelState.AddModelError("UserName", String.Format("This is a link {0}", "<a href='http://example.com'>Appropriate String From a Resource</a>"));