У меня проблемы с настройкой состояния модели MVC при входе в систему на веб-сайте. У меня типичный экран входа в систему с полями для имени пользователя и пароля. В Account Controller есть 2 метода для обработки входов. Первый - это метод Get с именем «LogOn ()», который просто возвращает представление входа в систему (которое является именем пользователя / pw), а второй также называется «LogOn (значения FormCollection)», но он имеет [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, и представление корректно проходит через код, но после этого как-то вызывается метод Get Logon (), который затем перезаписывает все и просто отображает представление, как если бы оно было пользователи впервые заходят на страницу!
Таким образом, общий процесс кода аналогичен приведенному ниже:
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();
}
Любая помощь или понимание того, почему этот процесс работает так, как он работает, будет принята с благодарностью, спасибо !!