我有以下疑问。我正在考虑在我的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 ......
由于
答案 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><div>This is in a div</div<></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>"));