Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 Resx中的HtmlTags显示在@Html.ValidationMessageFor中_Asp.net Mvc 3_Razor_Resources_Mvchtmlstring - Fatal编程技术网

Asp.net mvc 3 Resx中的HtmlTags显示在@Html.ValidationMessageFor中

Asp.net mvc 3 Resx中的HtmlTags显示在@Html.ValidationMessageFor中,asp.net-mvc-3,razor,resources,mvchtmlstring,Asp.net Mvc 3,Razor,Resources,Mvchtmlstring,我有以下疑问。我正在考虑在resx文本中使用html标记进行本地化。 当我直接投入资源时,我可以求助于: @Html.Raw(@Resources.ResourcesFM.Error_Email) 它的工作原理与预期一致。 问题是当资源被来自htmlhelper的验证消息调用时: @Html.ValidationMessageFor(model => model.Email) 从阁楼上得到: [DataType(DataType.EmailAddress, ErrorMessageRe

我有以下疑问。我正在考虑在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


谢谢

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

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

虽然不漂亮,但它很管用。您可以选择重新创建自己的验证助手版本,该版本从不对消息进行编码。

尝试以下操作:

视图:

控制器操作:

ModelState.AddModelError("UserName", "This is a link <a href='http://example.com'>Google Home</a>");
ModelState.AddModelError(“用户名”,“这是一个链接”);

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

ModelState.AddModelError("UserName", String.Format("This is a link {0}", "<a href='http://example.com'>Appropriate String From a Resource</a>"));
ModelState.AddModelError(“用户名”,String.Format(“这是一个链接{0})”,”);

Hi Bhamlin:“System.Web.HttpUtility.HtmlCode(字符串)”的最佳重载匹配项有一些无效参数-->这是我在放置时得到的:HttpUtility.HtmlCode(Html.ValidationMessageFor(…)…它需要字符串,而不是HtmlString。只需调用字符串()。我已经更新了答案。感谢Bhamlin在执行HttpUtility.HtmlCode时使用字符串(Html.ValidationMessageFor(…).ToString()):Html代码出现在我的页面中,没有任何错误:抱歉,bhamlin我没有正确地表达自己。我的意思是在表单字段中没有任何错误(没有呈现任何验证消息),此html:正在页面中呈现。如果资源存在验证错误,我仍然无法显示带有html标记的资源…哈,我想你的意思是没有错误,因为没有问题。无论如何,这是正常的,除非有错误,否则它实际上不会在跨度中设置消息。实际值上应该有一些
数据val
属性字段有错误,如果有错误,jquery validate会将其插入跨度。如果文本缩进4个空格或1个制表符,它将被解释为代码(添加突出显示,允许
标记…。我想这就是我将使用的解决方案。谢谢
@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>");
ModelState.AddModelError("UserName", String.Format("This is a link {0}", "<a href='http://example.com'>Appropriate String From a Resource</a>"));