HtmlTags в Resx отображаются в @Html.ValidationMessageFor

У меня есть следующие сомнения. Я рассматриваю возможность иметь html-теги в моих текстах resx для локализации. Когда я размещаю ресурсы напрямую, я могу прибегнуть к:

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

Для локализации вы можете использовать String.Format и выбрать соответствующий заполнитель для ссылки.

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

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>

Это не красиво, но это работает. Ваша альтернатива - воссоздать вашу собственную версию помощника проверки, которая никогда не кодирует сообщение.

Другие вопросы по тегам