0

Я пытаюсь создать простую страницу создания, содержащую сведения о пользователях и поле подтверждения пароля.ModelState.IsValid является ложным после подтверждения Jquery Validation

У меня есть модель представления пользователя и класс пользователя:

public class UserViewModel 
{ 
    public User AccountUser { get; set; } 
    [Required] 
    [Compare("AccountUser.Password")] 
    public string ConfirmPassword { get; set; } 
} 

[DisplayName("User Account")] 
public class User 
{ 
    [Required] 
    [DisplayName("Username")] 
    public string Username { get; set; } 
    [Required] 
    [DisplayName("Password")] 
    public string Password { get; set; } 
} 

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

Однако, если я совпадаю с двумя полями, jQuery проведет проверку и запрос отправки вернется к контроллеру. В этот момент мой ModelState.IsValid проверяется и возвращает false, ссылаясь на «Не удалось найти свойство AccountUser.Password» на ошибках для свойства Password.

Я понимаю разделение шаблона проблем, однако я пытаюсь понять, почему этот код не работает.

Может кто-нибудь объяснить, почему modelstate возвращает false после того, как не будут отображаться сообщения проверки jquery?

ответ

0

Возможно, это связано с вашим ответом, поэтому ваша проверка на стороне клиента работает, но данные не полностью возвращаются вашему контроллеру.

Поместите некоторые контрольные точки в свой контроллер и проверьте, не возвращается ли его нулевые значения для вашего пользователя в вашей модели ViewModel.

+0

Я вижу объект полностью заселен, как только он получает обратно к контроллеру, со всеми значениями в правильных местах. – Jastill

0

Я думаю, что вы можете использовать только Compare атрибут как [Compare("PropertyName")], не [Compare("Object.PropertyName")] - как ошибка говорит: ... cannot find the property Account.Password ....

Вы должны изменить свою модель и ваш атрибут как [Compare("Password")]

+0

Это не сработает (я попытался), потому что свойство Password не существует в самой модели представления, но только внутри дочернего класса. – Jastill

+0

@Jastill - Я знаю, что это не сработает! как я сказал: «Вы должны изменить свою модель ...» – AminSaghi

+0

То, что я хочу знать, - это то, почему валидация JavaScript работает, но некоторые магические за кулисами. Проверка ModelState не будет. Я бы подумал, что требуется только одна процедура проверки. Если он передает сравнение сравнения jQuery, то модельное состояние для этого поля должно быть без ошибок. – Jastill

Смежные вопросы