Я пытаюсь выполнить некоторую проверку в asp .net MVC 2.0 для моего приложения. Я хочу провести хорошую проверку на стороне клиента. Проверка должна проводиться в большинстве случаев на стороне модели с помощью аннотаций DataAnotes с пользовательскими атрибутами (такими как CompareTo, StringLenght, MinPasswordLenght (из значения Membership.MinimumumpassworkdLenght).
Для этого я попытался использовать xval с jquery.validation.
Некоторые специфические вещи заключаются в том, что большинство форм будут работать с ajax, и большинство проблем возникает, когда я хочу проверить форму с помощью ajax.
Вот ссылка на пример проекта http://www.sendspace.com/file/m9gl54.
Я получил две формы в качестве элементов управления ValidFormControl1.ascx, ValidFormControl2.ascx
<% using (Ajax.BeginForm("CreateValidForm", "Test", new AjaxOptions { HttpMethod = "Post" })) {%> <div id="validationSummary1">
<%= Html.ValidationSummary(true)%> </div> <fieldset>
<legend>Fields</legend>
<div class="editor-label">
<%= Html.LabelFor(model => model.Name)%>
</div>
<div class="editor-field">
<%= Html.TextBoxFor(model => model.Name)%>
<%= Html.ValidationMessageFor(model => model.Name)%>
</div>
<div class="editor-label">
<%= Html.LabelFor(model => model.Email)%>
</div>
<div class="editor-field">
<%= Html.TextBoxFor(model => model.Email)%>
<%= Html.ValidationMessageFor(model => model.Email)%>
</div>
<div class="editor-label">
<%= Html.LabelFor(model => model.Password)%>
</div>
<div class="editor-field">
<%= Html.TextBoxFor(model => model.Password)%>
<%= Html.ValidationMessageFor(model => model.Password)%>
</div>
<div class="editor-label">
<%= Html.LabelFor(model => model.ConfirmPassword)%>
</div>
<div class="editor-field">
<%= Html.TextBoxFor(model => model.ConfirmPassword)%>
<%= Html.ValidationMessageFor(model => model.ConfirmPassword)%>
</div>
<p>
<input type="submit" value="Create" />
</p> </fieldset> <% } %> <%= Html.ClientSideValidation<ValidModel>()
.UseValidationSummary("validationSummary1", "Please fix the following problems:") %>
Оба выглядят одинаково, разница только в том, что validation summaryID (validationSummary1, validationSummary2). Оба элемента управления отображаются на одной странице:
Form2
<%Html.RenderPartial("~/Views/Test/ValidFormControl2.ascx", null); %>
Form1
<%Html.RenderPartial("~/Views/Test/ValidFormControl.ascx", null); %>
Свойство проверки
Первая проблема, когда у нас есть два элемента управления с одинаковым типом для проверки, он не работает, потому что элементы HTML отображаются с именем поля (поэтому у нас есть два элемента с одинаковым именем «Пароль»). Только первая форма будет проверена на стороне клиента.
Хуже всего то, что даже если у нас разные типы и их имена имеют одинаковую валидацию, это тоже не сработает (это то, что мне нужно исправить, глупо будет называть некоторые уникальные свойства для валидации).
Есть ли какое-то решение для этого?
Проверка пользовательских атрибутов
Следующее, что проверка пользовательских атрибутов (Все эти ошибки возникают, когда я использую Ajax для проверки правильности форм при нормальной работе.):
CompareTo - простое сравнение с тем, что выполняется в шаблоне mvc для модели аккаунта (будет сравниваться атрибут класса с двумя свойствами), и оно не показывалось на странице. Для этого я создал собственный CachingRulesProvider с CompareRule и моим Атрибутом. Может быть, есть более простой способ сделать это?
StringLenght с минимальным и максимальным значением, я не буду описывать, как я это сделал, но есть ли легкий способ сделать это?
Сводка проверки
Когда у меня есть два элемента управления на странице, вся сводная информация о проверке отправляется первому элементу сводки проверки, даже сгенерированный xval скрипт говорит, что elementID для сводки различаются. Кто-нибудь знает, как его починить?
Информация о проверке
Есть ли возможность включить сообщения на месте, где находится Html.ValidationMessageFor (model => model.ConfirmPassword). Becsoue для меня это не появляется. Я хотел бы иметь сводную информацию и информацию о ближнем поле тоже не только красная граница. Кто-нибудь знает, как это сделать?
Ajax submit
Кто-нибудь знает, как сделать это легко без массивного кода в javascript для отправки через javascript. Это будет использоваться для изменения ввода ввода в элемент href (a).
Оба выглядят одинаково, разница только в проверке итогового ID