2011-05-07 2 views
2

При использовании проверки ASP.NET MVC в формах сообщения об ошибках выводятся в определенном html. Как, например, если вы проверка текстового поля, которые должны быть заполнены, выход после проверки не удается будет выглядеть примерно так:Проверка ASP.NET MVC - Как я могу изменить html, который выводится механизмом проверки MVC?

<label for="MonkeyName">Name: </label> 
<span class="field-validation-error">*</span> 
<br /> 
<input class="input-validation-error" id="MonkeyName" name="MonkeyName" type="text" value="" /> 

В приведенном выше коде, пролет тег был автоматически генерируется рамках проверки и в текстовое поле был добавлен класс с именем input-validation-error. Но что, если я хочу, чтобы валидатор генерировал разные html?

Я хотел бы использовать структуру проверки MVC, но я бы хотел иметь полный контроль над тем, как отображаются сообщения проверки, особенно, поскольку MVC обещает контроль над пользовательским интерфейсом. HTML и CSS, которые я разработал (до того, как вы решили использовать серверный язык программирования на стороне сервера), отличаются для сообщений об ошибках, потому что я хочу установить класс с контейнером текстового поля, а не с самим текстовым полем. Возьмите это в качестве примера:

<dl class="error"> 
    <dt> 
    <label for="email">Email</label> 
     <span class="required">Required</span> 
    </dt> 
    <dd> 
    <input class="textinput_med" id="FromEmail" name="FromEmail" type="text" value="" /> 
    <a href="#"><img src="Content/images/structure/help.png" width="30" height="30" alt="Help" /></a> 
    <span class="errormessage">Some Error</span> 
    </dd> 
</dl> 

Хотя у меня есть срок для сообщения об ошибке, я хотел бы установить тег контейнера (ЭБ) с именем ошибки класса CSS. Есть ли способ определить способ отображения сообщений об ошибках с помощью рамки проверки?

Примечание: Несмотря на то, что я думал о решении с jQuery, которое обнаруживает поля формы, которые имеют класс «ошибка ввода-проверки», и устанавливает их соответствующие контейнеры с моей собственной ошибкой класса «css», я не думаю, что это хорошее решение, и я думаю, что это обходное решение для чего-то, что могло бы быть лучше. Я могу перейти с MVC 2 на MVC 3, если это решает проблему.

ответ

0

Похоже, вам нужно написать другой метод расширения, который редактирует содержание ихнего угла

namespace HtmlExtensions 
{ 
    public static HtmlString CustomValidateFor(this HtmlHelper helper, ...) 
    { 
     return Edit(helper.ValidateFor(...)) 
    } 
} 
0

One можно проводить бы воспользоваться, как поиском ненавязчивой сценарий проверки ASP.NET MVC для всех элементов в форме с атрибутом data-valmsg-for="inputName", и он тегирует их с классом field-validation-error. Таким образом, вы можете работать с существующей функциональностью путем добавления этого атрибута к контейнеру:

<dl data-valmsg-for="FromEmail" data-valmsg-replace="false"> 
    <dt> 
    <label for="email">Email</label> 
    <span class="required">Required</span> 
    </dt> 
    <dd> 
    <input class="textinput_med" id="FromEmail" name="FromEmail" type="text" value="" /> 
    <a href="#"><img src="Content/images/structure/help.png" width="30" height="30" alt="Help" /></a> 
    </dd> 
</dl> 

Затем <dl> получат field-validation-error класса в дополнении к <input>. Недостатком здесь является то, что вы потеряли сообщение об ошибке проверки. Если вы используете сводку проверки, возможно, это не будет проблемой (и вы можете контролировать этот контейнер, пометив контейнер с помощью data-valmsg-summary="true" и разместив в нем <ul>).

Если работа в рамках не работает для вас, вы всегда можете настроить jquery.validate.unobtrusive.js по своему усмотрению. Код стилизации/размещения ошибки довольно прост, как только вы обнимаете его (в частности, посмотрите на функции и onErrors в строках 39 и 55).