Проверка клиентов Asp.Net Mvc 3, генерация атрибутов - PullRequest
9 голосов
/ 12 июля 2011

Asp.net Mvc3 объявляет некоторые пользовательские атрибуты, такие как «data-val-required», на элементах ввода для выполнения проверки.Я знаю всю теорию, лежащую в основе этого, как она работает.

Что я хочу знать, это:

Когда я создаю свою форму внутри "@using (Html.BeginForm ())", она производитатрибуты, но он не создает эти атрибуты, когда я помещаю свою форму между простым тегом "<form>".

ниже - демонстрация, которую я создал, чтобы продемонстрировать, что я говорю

Razor Code, форма внутри BefingForm ()

 @using (Html.BeginForm()) {
                @Html.EditorFor(model => model.EmailAddress)
                @Html.ValidationMessageFor(model => model.EmailAddress)
}

сгенерированный Html содержит «data-val-required» как атрибут, показанный ниже

<input type="text" value=""  data-val-required="The Email Address field is required."  data-val-email="my message">

Форма кода бритвы внутри чистого тега HTML

<form action="/Account/Register" method="post">
            @Html.EditorFor(model => model.EmailAddress)
            @Html.ValidationMessageFor(model => model.EmailAddress)
</form>

сгенерированный HTML не содержит атрибут «data-val-required», показанный ниже

<input type="text" value=""  gtbfieldid="44">

Мой вопрос заключается в том, как я могу попросить MVC добавить эти атрибуты, даже если форма находится в боковых чистых HTML-тегах

Ответы [ 2 ]

5 голосов
/ 18 июля 2011

Проблема здесь в том, что внутренне Html.BeginForm помечается Html.EnableClientValidation () для создания FormContext, который будет хранить метаданные проверки на стороне клиента. Теперь любой вспомогательный метод HTML, который отображает сообщение проверки, также регистрирует соответствующие метаданные проверки на стороне клиента в FormContext. Результат - то, что вы получите, если будете использовать помощника. Однако если вы попытаетесь использовать синтаксис HTML, а не помощники, FormContext никогда не будет зарегистрирован, и поэтому ваша проверка никогда не будет добавлена.

С уважением,

Huske

5 голосов
/ 12 июля 2011

Я полагаю, что метод BeginForm внутренне назначает объект formcontext для свойства FormContext представления viewCotnext.Если вы не хотите использовать простые теги html-формы, вы должны сделать это вручную, например

<%
    this.ViewContext.FormContext = new FormContext();
%>

, а в бритве это, вероятно, будет

@{
    this.ViewContext.FormContext = new FormContext();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...