У меня возникли проблемы с работой MVC modelstate с процессом входа на веб-сайт. У меня типичный экран входа в систему с полями для имени пользователя и пароля. Контроллер учетных записей имеет 2 метода обработки входов в систему. Первый - это метод Get под названием «LogOn ()», который просто возвращает представление входа в систему (которое является именем пользователя / pw), а второй также называется «LogOn (FormCollection values)», но он имеет [AcceptVerbs (HttpVerbs.Post )] уточняется.
Поэтому, если пользователь пытается войти в систему, не вводя имя пользователя и / или pw, метод post проверяет это и добавляет ошибки в ModelState через ModelState.AddModelEror (). Это первое, что происходит, и после проверки, если ModelState.IsValidated () имеет значение false, я просто возвращаю View ().
//(validate just adds to Modelstate when values are null)
if (!ValidateLogOn(userName, password))
return View();
Теперь это отлично работает: если какие-либо из них пусты, страница просто возвращается и отображает правильное сообщение об ошибке с использованием HtmlValidationMessage (keyName). Проблема в том, что после проверки я выполняю фактический вызов входа в систему, чтобы запустить процесс аутентификации для предоставленного имени пользователя / pw, который заключен в блок try / catch. Если в этом процессе возникает ошибка, я хотел бы добавить ошибку в ModelState и вернуть View (), как я сделал выше. Ошибка успешно добавляется в ModelState, и View правильно выполняет код, но после этого каким-то образом вызывается метод Get Logon (), который затем перезаписывает все и просто отображает View, как если бы это был пользователи впервые заходят на страницу!
Таким образом, общий процесс кода аналогичен описанному ниже:
public ActionResult LogOn()
{
return View();
}
public ActionResult LogOn(FormCollection values)
{
if (!ValidateLogOn(userName, password))
return View();
try {
loginProcess(username, password);
}
catch (Exception e) {
ModelState.AddModelError(keyName, "Error Message");
return View();
}
return View();
}
Мы будем очень благодарны за любую помощь или понимание того, почему этот процесс работает так, как он работает, спасибо!