Как выполнить обработку ошибок в контроллере ASP.NET MVC 3? - PullRequest
0 голосов
/ 07 февраля 2012

У меня есть контроллер учетной записи, который имеет:

  • LoginForm (получить действие)
  • Вход (после действия)
  • RegisterForm (получить действие)
  • Регистрация (последующее действие)

В индексном действии другого контроллера я использую их как:

  • Html.RenderAction ("RegistrationForm", "Acount");
  • Html.RenderAction ("LoginForm", "Acount");

Все работает нормально, и я могу зарегистрировать нового пользователя, войти в систему и проверить с ненавязчивой проверкой.

Проблема в том, когда выполняется некоторая внутренняя проверка в действии «Регистрация / Вход», и если есть ошибка, я не знаю, как передать ошибку, которая будет отображена.

Я пробовал с шаблоном PRGи это работает нормально.Я получаю ошибку, отображаемую в форме с сохраненными данными, но PRG не способ сделать это.

Что является альтернативным решением этой проблемы без использования ajax для проверки или перемещения этих методов в контроллере, гдеиспользуются регистрационные формы / регистрационные формы?

Я хочу пропустить использование TempData из-за использования сеанса в фоновом режиме.

РЕДАКТИРОВАТЬ ОБРАЗЕЦ КОДА:

class AccountController : SomeBaseController{

    [HttpGet]
    public PartialViewResult RegistrationForm()
    {
        return PartialView(new RegisterUser());
    }

    [HttpPost]
    public ActionResult RegisterUser(RegisterUser user)
    {
        if (ModelState.IsValid)
        {
            var _user;// create domain user from Register user Model;

            var _validationOutput = _userService.DoSomeAwsomeServerSideValidation(_user);// do some custom validation

            if (_validationOutput.IsFault)
            {
                // we preseve tempdata in base controller OnActionExecuted
                _validationOutput.ErrorMessages.ForEach(x => ModelState.AddModelError(_validationOutput.ErrorCode, _validationOutput));
                // redirect to home controller custom error occured
                return RedirectToAction("Index", "Home", user);
            }

            return RedirectToAction("RegistrationInfo");
        }

        return RedirectToAction("SomeUserInfoAction");
    }

}

class HomeController : SomeBaseController {
 Index(){
    return View();
 }}

HomeControllerMarkup { 
    @{Html.RenderAction("RegistrationForm", "Acount");} 
    @{Html.RenderAction("LoginForm", "Acount");}
}

1 Ответ

1 голос
/ 07 февраля 2012

Вы можете вручную добавить ошибки к вашему ModelState в вашем почтовом контроллере, используя:

ModelState.AddModelError("", @"You didn't perform task XYZ");

После этого вы сможете вернуться к просмотру и отобразить ошибки в сводке проверки:

@Html.ValidationSummary(false, "Login was unsuccessful because...")
...