ModelState.AddModelError кодирует HTML

Я замечаю странную проблему при использовании ModelState.AddModelError для проверки ввода в мои формы. Выход из Html.ValidationMessage не является истинным значением HTML, а кодированным значением, поэтому стиль CSS не применяется к сообщению об ошибке.

Пример:

private string errorMessage = "<span class=\"negative\">{0}</span><br class=\"hid\" />";
ModelState.AddModelError("title", String.Format(errorMessage, "Tab title is required"));

Выход отображается как:

<span class="field-validation-error">&lt;span class=&quot;negative&quot;&gt;URL is Required&lt;/span&gt;&lt;br class=&quot;hid&quot; /&gt;</span>

Это не так, как раньше, с их более ранней бета-версией, и я не уверен, какой подход здесь принять.

Спасибо Ник

Ответы

Ответ 1

Есть и другой способ сделать это, не создавая собственного расширения.

Скажем, например, в одном из наших контроллеров мы имеем следующее:

ModelState.AddModelError("Name", "<b>Please Use a Valid Person Name</b>");

Затем мы можем сделать следующее:

@if(Html.ValidationMessageFor(x => x.Name) != null){
    @Html.Raw(Html.ValidationMessageFor(x => x.Name).ToString())
}

Это предотвратит кодирование сообщения об ошибке '<b>Please Use a Valid Person Name</b>'.

Ответ 2

Создайте свой собственный метод расширения, который имитирует Html.VallidationMessage...?

Мне нужно было сделать что-то подобное, потому что встроенный материал проверки MVC (ModelState, ValidationMessage и т.д. и т.д.) не обслуживает страницы, на которых есть более одной формы на странице.