1

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

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

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

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

从一个属性中得到:

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

我正在尝试什么...

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

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

谢谢

4

3 回答 3

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>");
于 2012-07-06T19:24:29.783 回答
0

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

ModelState.AddModelError("UserName", String.Format("This is a link {0}", "<a href='http://example.com'>Appropriate String From a Resource</a>"));
于 2012-07-06T19:28:59.503 回答
0

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

所以如果 `Html.ValidationMessageFor(...)' 返回

<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>

它不漂亮,但它有效。您的替代方法是重新创建您自己的验证助手版本,该版本从不编码消息。

于 2012-04-04T18:42:45.957 回答