Проверка asp .net MVC 2.0 - PullRequest
       30

Проверка asp .net MVC 2.0

1 голос
/ 27 мая 2010

Я пытаюсь выполнить некоторую проверку в 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

Ответы [ 2 ]

0 голосов
/ 07 декабря 2011

Что касается отправки ajax, вы можете просто поместить кнопку в форму, а затем выполнить щелчок по ней через jQuery. Это также приведет к публикации вашей формы.

Вы также можете просто выполнить ajax-вызов к действию контроллера (по ссылке), и здесь вы отправляете необходимые данные из вашей формы.

0 голосов
/ 06 декабря 2010

Прежде всего, я не знаю, почему вы хотите иметь два элемента управления, имеющие два одинаковых поля, одну форму. Каждая форма должна иметь свою собственную модель и использовать модель в качестве валидатора.

namespace Sample.Models { [Метатип (TypeOf (PersonaValidation))] публичный частичный класс Person { } открытый класс PersonValidation { [Обязательно (ErrorMessage = "Имя обязательно")] [StringLength (20, ErrorMessage = "Имя должно содержать не более 20 символов")] [DisplayName («Имя»)] публичная строка Firstname {get; задавать; }

    [Required(ErrorMessage = "Last name Required")]
    [StringLength(20, ErrorMessage = "Last name must be 20 or less characters in length")]
    [DisplayName("Last Name")]
    public string Lastname { get; set; }

} }

В aspx добавьте следующие файлы скриптов перед тегом формы:

<h2>Validation Sample</h2>

<script src="/Scripts/MicrosoftAjax.js" type="text/javascript"></script>   
<script src="/Scripts/MicrosoftMvcAjax.js" type="text/javascript"></script>   
<script src="/Scripts/MicrosoftMvcValidation.js" type="text/javascript"></script>   
<% Html.EnableClientValidation(); %>

<% using (Html.BeginForm()) {%>
    <%= Html.ValidationSummary(true) %>
      <fieldset>

        <div class="editor-label">
            <%= Html.LabelFor(model => model.Firstname) %>
        </div>
        <div class="editor-field">
            <%= Html.TextBoxFor(model => model.Firstname) %>
            <%= Html.ValidationMessageFor(model => model.Firstname) %>
        </div>

        <div class="editor-label">
            <%= Html.LabelFor(model => model.Lastname) %>
        </div>
        <div class="editor-field">
            <%= Html.TextBoxFor(model => model.Lastname) %>
            <%= Html.ValidationMessageFor(model => model.Lastname) %>
        </div>

        <p>
            <input type="submit" value="Save" />
        </p>
    </fieldset>

<% } %>

Это будет работать каждый раз. Сообщение об ошибке будет отображаться рядом с недопустимым полем.

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