ASP.NET MVC - добавить XHTML в сообщения об ошибках проверки - PullRequest
4 голосов
/ 21 марта 2010

Просто начинаю с ASP.Net MVC и попадаю в ловушку в отношении проверочных сообщений.У меня есть собственный атрибут проверки, назначенный моему классу для проверки нескольких свойств моей модели.

Когда эта проверка завершится неудачно, мы хотели бы, чтобы сообщение об ошибке содержало разметку XHTML, включая ссылку на страницу справки(это было сделано в исходном проекте WebForms в виде ASP: Panel).

В настоящий момент XHTML-теги, такие как «», в сообщении ErrorMessage отображаются на экране.Есть ли способ получить ValidationSummary для правильной визуализации разметки XHTML?Или есть лучший способ справиться с такой проверкой?

Спасибо

Ответы [ 5 ]

7 голосов
/ 22 ноября 2010

Вот кратковременное исправление, которое использует HtmlDecode () для обратного кодирования. У меня работает.

(Не удалось перестроить всю объектную модель Validation.)

public static class ValidationExtensions
{
  public static MvcHtmlString ValidationMessageHtmlFor<TModel, TProperty>(
    this HtmlHelper<TModel> htmlHelper,
    Expression<Func<TModel, TProperty>> expression)
  {
    return new MvcHtmlString(
      HttpUtility.HtmlDecode(
        htmlHelper.ValidationMessageFor<TModel, TProperty>(
        expression, 
        null, 
      ((IDictionary<string, object>)new RouteValueDictionary()))
        .ToHtmlString()));
  }
}
2 голосов
/ 10 февраля 2011

Я закончил тем, что просто взял вывод ValidationSummary и просто HtmlDecode его.

Отлично работает с ошибками ModelState в html, и мне не нужно создавать собственную ValidationSummary.

public static MvcHtmlString ValidationSummaryNoEncode(this HtmlHelper htmlHelper)
{
    string validationSummaryOutput = htmlHelper.ValidationSummary().ToHtmlString();

    string decodedValidationSummaryOutput = HttpUtility.HtmlDecode(validationSummaryOutput);

    return MvcHtmlString.Create(decodedValidationSummaryOutput);
}
2 голосов
/ 21 марта 2010

Я почти уверен, что стандартное сообщение проверки помогает HTML кодировать любое сообщение, которое может быть в вашем атрибуте.Я предлагаю использовать исходный код , доступный в CodePlex, в качестве отправной точки для написания собственного расширения HtmlHelper, которое не выполняет кодирование HTML в строке ошибки.Вы хотите найти в пространстве имен System.Web.Mvc.Html файл ValidationExtensions.cs.

0 голосов
/ 07 сентября 2013

Вы также можете использовать вспомогательные методы Html.Raw и HttpUtility.HtmlDecode в представлении для отображения проверочных сообщений, содержащих разметку HTML. Вот простой пример:

Модель:

[Required(ErrorMessage = "This message contains <b>HTML markup</b> code.")]
public string MyProperty{ get; set; }

Вид:

@Html.Raw(HttpUtility.HtmlDecode(Html.ValidationMessageFor(x => x.MyProperty).ToHtmlString()))
0 голосов
/ 21 марта 2010

ОК, спасибо tvanfosson за предложение посмотреть исходный код.

Я, по сути, свернул свой собственный помощник "Html.ValidationSummaryXHTML", который не HtmlEncode ни одного сообщения об ошибке в ModelState, просто отложил до "InnerHtml".

Работает угощение!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...