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

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

ありがとう

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

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