2012-02-07 1 views
0

У меня есть контроллер счета, которые имеют:Как выполнить обработку ошибок в контроллере ASP.NET MVC 3?

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

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

  • Html.RenderAction («RegistrationForm», «Acount»);
  • Html.RenderAction («LoginForm», «Acount»);

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

Проблема заключается в том, что делать некоторые внутренние проверки в действии Register/Login, и если есть ошибка, я не знаю, как передать полученную ошибку.

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

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

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

EDIT КОД ОБРАЗЦА:

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");} 
} 
+0

Вы говорите о отображении ошибки проверки для введенной информации или это сообщение об ошибке, которое должно отображаться на отдельной странице ошибок? Причина, по которой я спрашиваю, вы говорите, что PRG - это не к ней? Можем ли мы увидеть действия вашего контроллера, чтобы понять это лучше? – Dangerous

+0

Невозможно сделать это, так как PRG - это предотвратить сообщение о форме x, которое здесь не так. –

ответ

1

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

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

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

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

Я делаю это, но проблема в том, что я не могу вернуть представление, в котором хранятся RegisterForm и LoginForm, поскольку он находится в другом контроллере. Если я перенаправляюсь к действию, тогда я должен prg и использовать tempview, который я не хочу использовать. –