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><div>This is in a div</div<></span>
затем HttpUtility.HtmlDecode(Html.ValidationMessageFor(...).ToString())
дам тебе
<span><div>This is in a div</div></span>
Это не красиво, но это работает. Ваша альтернатива - воссоздать вашу собственную версию помощника проверки, которая никогда не кодирует сообщение.