2012-04-04 56 views
1

我有以下懷疑。我正在考慮選擇在我的resx文本中使用html標記進行本地化。 當我把資源直接,我可以訴諸:Resx中的HtmlTags顯示在@ Html.ValidationMessageFor

@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

試試這個:

查看:

@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>"); 
+0

如果您縮進您的文本4空格或1個選項卡,則將其解釋爲代碼(添加突出顯示,允許''標籤...)。 – kay 2012-07-09 01:47:17

0

Html.ValidationMessageFor html-encodes the message。但你應該可以簡單地致電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> 

這不是很漂亮,但它的工作原理。您的替代方案是重新創建自己的驗證幫助程序版本,該程序從不編碼消息。

+0

嗨巴爾姆林:'最好的結束爲「System.Web.HttpUtility.HtmlDecode(String)」加載匹配有一些無效的參數 - >這是我得到的時候,我把:HttpUtility.HtmlDecode(Html.ValidationMessageFor(...))... – mcartur 2012-04-05 17:42:37

+0

它需要一個字符串,而不是一個HtmlString。只需調用ToString()就可以了。我已經更新了我的答案。 – bhamlin 2012-04-05 18:10:15

+0

感謝Bhamlin在做HttpUtility.HtmlDecode(Html.ValidationMessageFor(...)。ToString())時:HTML代碼出現在我的頁面中,沒有任何錯誤: mcartur 2012-04-05 18:22:31

0

本地化,你可以使用的String.Format和選擇合適的佔位符鏈接

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

我認爲這是我將要使用的解決方案。謝謝 – mcartur 2012-07-09 10:08:35

相關問題