2012-04-04 12 views
1

私は次の疑問を持っています。私は、ローカリゼーションのために私のresxテキストの中にhtmlタグを持つオプションを検討しています。 私はリソースを置くとき、直接私がに頼ることができます。@ Html.ValidationMessageForに表示されるResx内のHtmlTags

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

と期待どおりに動作します。 attibuteから

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

ガット:リソースはHtmlHelperのからの検証メッセージによって呼び出されているとき 問題がある

私がしようとしています何
[DataType(DataType.EmailAddress, 
ErrorMessageResourceType = typeof(ResourcesFM), 
ErrorMessageResourceName = "ErrorMailIncorr")] 

...

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

ヘルパーの出力がMvcHtmlStringであるため、@ html.Rawを使用したときと同じ結果を得る方法がわかりません。

ありがとう

答えて

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

0

Html.ValidationMessageForメッセージをhtmlエンコードします。しかし、あなたは結果にを単に呼び出すことができるはずです。結果に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

+0

文字列で、HtmlStringではありません。その上でToString()を呼び出すだけです。私は私の答えを更新しました。 – bhamlin

+0

HttpUtility.HtmlDecode(Html.ValidationMessageFor(...)。ToString())を実行しているときにBhamlinさんに感謝します。HTMLコードがページにエラーなしで表示されます: mcartur

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

関連する問題