У меня есть страница регистрации, где пользователь может ввести свои имя, фамилию, адрес электронной почты и пароль, а также другие поля.
Я связал атрибуты проверки с этой моделью (называемые «Пользователь» и созданные через LINQtoSQL), и все работает хорошо.
Код модели:
[MetadataType(typeof(UserValidation))]
public partial class User { }
[Bind(Exclude = "UserID")]
[PropertiesMustMatch("Password", "ConfirmPassword", ErrorMessage = "The password and confirm password don't match.")]
public class UserValidation
{
[Required(ErrorMessage = "First name required"), StringLength(20, MinimumLength=3, ErrorMessage = "Must be between 3 and 20 characters")]
public string FirstName { get; set; }
[Required(ErrorMessage = "Last name required"), StringLength(20, MinimumLength = 3, ErrorMessage = "Must be between 3 and 20 characters")]
public string LastName { get; set; }
[Required(ErrorMessage = "Email address required"), RegularExpression("^[a-z0-9_\\+-]+(\\.[a-z0-9_\\+-]+)*@[a-z0-9-]+(\\.[a-z0-9-]+)*\\.([a-z]{2,4})$", ErrorMessage = "Must be a valid email address")]
public string Email { get; set; }
[Required(ErrorMessage = "Password required"), StringLength(20, MinimumLength = 6, ErrorMessage = "Password must be between 6 and 20 characters")]
public string Password { get; set; }
[Required(ErrorMessage = "Confirm password required"), StringLength(20, MinimumLength = 6, ErrorMessage = "Password must be between 6 and 20 characters")]
public string ConfirmPassword { get; set; }
}
После регистрации и входа в систему я хочу, чтобы пользователь мог редактировать свои FirstName, LastName и Email (давайте назовем эти поля «Account») в одном представлении и «Password» в другом. Вот где моя проблема.
Когда я отправляю форму, обновляющую данные полей учетной записи через ту же модель («Пользователь»), которая использовалась при регистрации, метод IsValid выдает ошибку ModelState для отсутствующего поля «Пароль».
Код контроллера:
//
// GET /Talent/Account
public ActionResult Account()
{
string cookieUser = User.Identity.Name;
User user = userRepository.GetUserByEmail(cookieUser);
return View(user);
}
// POST /Talent/Account
[HttpPost]
public ActionResult Account(User model)
{
if (ModelState.IsValid)
{
// do something
ModelState.AddModelError("", "All good.. "+ model.FirstName + " - " + model.LastName);
}
return View(model);
}
Как я могу обойти это ?? Лучшие практики и т.д ...