У меня есть пользователь класса, который выглядит следующим образом:
public class User
{
public int UserId { get; set; }
[Required(ErrorMessage = "A username is required.")]
[StringLength(20, ErrorMessage = "Your username must be 4-20 characters.", MinimumLength = 4)]
[RegularExpression("^[a-zA-Z0-9]*$", ErrorMessage = "Your username can only consist of letters and numbers.")]
[Remote("UsernameExists", "RemoteValidation", ErrorMessage = "Username is already taken")]
public string Username { get; set; }
[Required(ErrorMessage = "A password is required.")]
[MinLength(4, ErrorMessage = "Your password must have at least 4 letters.")]
public string Password { get; set; }
[Required(ErrorMessage = "An email address is required.")]
public string Email { get; set; }
}
Для функции регистрации я создал ViewModel, который содержит объект User и строку для подтверждения пароля:
public class RegistrationViewModel
{
public User User { get; set; }
[DisplayName("Password confirmation")]
[Required, Compare("User.Password", ErrorMessage = "The password do not match")]
public string PasswordConfirmation { get; set; }
}
Первая проблема, с которой я сталкиваюсь, заключается в том, что я не могу заставить работать проверку Сравнения ("User.Password"), так как он не находит свойства для пользователя.Есть ли способ проверить свойство PasswordConfirmation по свойству User.Password?
Вторая проблема - удаленная проверка поля Имя пользователя.Я следовал учебному пособию Дэвида Хейдена по адресу http://davidhayden.com/blog/dave/archive/2011/01/04/ASPNETMVC3RemoteValidationTutorial.aspx, но параметр username в методе UsernameExists всегда равен нулю.Я что-то здесь упускаю?
Редактировать:
Извините, но на самом деле я не совсем понял, какую ошибку я получаю для сравнения паролей.Работает нормально при заполнении полей, если пароли не совпадают, я получу сообщение об ошибке.Однако при отправке формы я получаю следующую ошибку в сводке проверки: не удалось найти свойство с именем UserToRegister.Password.
Редактировать 2:
Я выяснил часть проблемы, спасибона пост Джо.Удаленный валидатор отправляет обратно URL /? UserToRegister.Username = temp, который явно не соответствует параметру username моего действия контроллера.Чтобы сопоставить мой параметр действия с UserToRegister.Username, необходимо следующее:
public ActionResult UsernameExists([Bind(Prefix = "UserToRegister.Username")]string username)
Теперь этот параметр корректно передает параметр методу.Однако я все еще получаю сообщение об ошибке при использовании атрибута Compare в поле пароля.
Спасибо.