Проблема, с которой я столкнулся, заключается в том, что я модифицирую свою модель в посту, вместо того, чтобы заполнить ее через форму (поля - это хэш пароля и соль для пароля) по очевидным причинам. Когда сообщение в действие, очевидно, хеш пароля и соль - вычисленные значения, не введенные пользователем. Проблема заключается в том, что, если я их сгенерирую и присваиваю значения моей модели с размещенным клиентом, состояние модели все равно говорит, что они требуются, даже если свойства имеют значения. См. Код ниже. Это мое действие в регистре.ModelState.IsValid является ложным при модификации модели перед проверкой действительности
[HttpGet]
public ActionResult Register()
{
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Register(Customer customer)
{
var password = Request.Form.Get("password");
var ConfirmPassword = Request.Form.Get("confirmpassword");
if ((password != null && ConfirmPassword != null) && (!string.IsNullOrWhiteSpace(password)
&& !string.IsNullOrWhiteSpace(ConfirmPassword)) && password == ConfirmPassword)
{
//generate a password salt
var passwordsalt = Models.Helpers.PasswordHasher.GetSalt();
//convert it into a string that can be used again by calling the Convert.FromBase64String(string); function on what will be stored
customer.PasswordSalt = Convert.ToBase64String(passwordsalt);
//compute the password hash here and store it in the customer
customer.PasswordHash = Models.Helpers.PasswordHasher.ComputeHash(password, "SHA256", passwordsalt);
}
else if (!Models.Helpers.ValidationLibrary.ValidatePasswordRequirements(password))
{
ModelState.AddModelError("", "Password must be 8 characters long, have at least one number or symbol");
}
else
{
ModelState.AddModelError("", "Password and confirm password do not match");
}
if (ModelState.IsValid)
{
//db.Customers.Add(customer);
//db.SaveChanges();
UserRegistration regularUser = new UserRegistration();
regularUser.customer = customer;
regularUser.role = new XREF_CustomerRole { Role_ID = 3, Customer_ID = customer.Customer_ID };
Models.Helpers.Helper.createUser(regularUser);
return Login(new UserLogin { Email = customer.Email, Password = customer.PasswordHash, RememberMe = false });
}
return View(customer); ;
}
Вот скриншот значений.
А вот скриншот из значений в модели состояния Наряду с соответствующими ключами
Спасибо! Этот связанный пример действительно помог. Вы знаете причину этой странной функциональности? Похоже, что с mvc предполагается, что ваша модель не имеет вычисленных полей. – ddeamaral
Причина объясняется во второй части [этого ответа] (http://stackoverflow.com/questions/26654862/textboxfor-displaying-initial-value-not-the-value-updated-from-code/26664111#26664111) –