Проверять текстовое поле вручную с помощью ненавязчивой проверки jQuery asp.net MVC3

Таким образом, у меня есть многошаговый процесс, который позволяет пользователю восстановить забытый пароль. Шаги примерно такие, с разными действиями для каждого шага в моем контроллере:

  1. Введите имя пользователя и адрес электронной почты
  2. Введите пароль, ответьте на вопрос
  3. Отправьте пользователю ссылку на восстановление, если все прошло хорошо

Я пытался использовать одну модель для всего:

public class AccountForgotPassword
{

    [Required()]
    [DisplayName("Username")]
    public string UserName { get; set; }

    [Required()]
    public string Email { get; set; }

    [Required()]
    public string PasswordAnswer { get; set; }

}

Но когда я проверяю ModelState.IsValid при первом действии, так как пользователь не может еще ввести свой ответ на вопрос о пароле, он всегда будет ложным и заставляет какой-то интересный код проверять, действительно ли состояние модели действительно, но отсутствует ответ на пароль, так как я еще не знаю, кто пользователь.

Чтобы обойти это, я решил отказаться от типизированной модели и просто использовать строковые параметры в своих действиях. Единственная проблема сейчас заключается в том, что я больше не могу использовать легкие проверки, которые вы получаете с привязкой модели.

С учетом сказанного, кто-нибудь знает простой способ вручную подключить проверку JQuery к отдельным входам, чтобы он проверил требуемое правило? Кроме того, эта проводка позволит мне использовать стандартные сообщения об ошибках, которые генерирует валидатор, или я должен предоставить свои собственные после их подключения? Было бы так легко, на мой взгляд:

@{
    ViewBag.Title = "Forgot Password";
}
<h2>
    Forgot Password</h2>
@using (Html.BeginForm())
{ 
    <p>
        @Html.Label("UserName", "Username")
        @Html.TextBox("UserName")
        @Html.ValidationMessage("UserName")
    </p>

    <p>
        @Html.Label("Email", "Email")
        @Html.TextBox("Email")
        @Html.ValidationMessage("Email")
    </p>

    <p>
        <input type="submit" value="Send Form" />
    </p>
}

<script type="text/javascript">
    $.validator.unobtrusive.addRule(..something here...);
</script>

Также, если есть лучший способ сделать это, пожалуйста, дайте мне знать. Заранее спасибо.


ОБНОВИТЬ

Для всех, кто найдет это, я выяснил, как добавить правила вручную. Должен был сначала прочитать документы для проверки. Предполагая представление HTML выше, скрипт будет:

<script type="text/javascript">
    $(function () {
        $('#UserName').rules('add', {
            required: true,
            messages: {
                required: 'The username field is required.'
            }
        });

        $('#Email').rules('add', {
            required: true,
            messages: {
                required: 'The email field is required.'
            }
        });

        $.validator.unobtrusvie.parse('form');
    });
</script>

Однако, подумав немного об этом и приняв во внимание ответ А.Финкельштейна, я думаю, что я просто сделаю 2 разные модели представлений и позволю фреймворку сделать всю работу за меня.

1 ответ

Решение

Если сначала вы укажете только имя пользователя и пароль, а затем ответ "Пароль", я думаю, что самое простое решение - это две отдельные модели просмотра. Тогда вы все равно можете использовать соответствующую модель представления и проверку для каждого раздела.

Другие вопросы по тегам