Проверять текстовое поле вручную с помощью ненавязчивой проверки jQuery asp.net MVC3
Таким образом, у меня есть многошаговый процесс, который позволяет пользователю восстановить забытый пароль. Шаги примерно такие, с разными действиями для каждого шага в моем контроллере:
- Введите имя пользователя и адрес электронной почты
- Введите пароль, ответьте на вопрос
- Отправьте пользователю ссылку на восстановление, если все прошло хорошо
Я пытался использовать одну модель для всего:
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 ответ
Если сначала вы укажете только имя пользователя и пароль, а затем ответ "Пароль", я думаю, что самое простое решение - это две отдельные модели просмотра. Тогда вы все равно можете использовать соответствующую модель представления и проверку для каждого раздела.