【发布时间】:2012-02-07 12:48:28
【问题描述】:
我有一个帐户控制器,它具有:
- LoginForm(获取操作)
- 登录(发布操作)
- RegisterForm(获取操作)
- 注册(操作后)
在另一个控制器的索引操作中,我使用将它们呈现为:
- Html.RenderAction("RegistrationForm", "Acount");
- Html.RenderAction("LoginForm", "Acount");
一切正常,我可以注册新用户、登录并通过不显眼的验证进行验证。
问题是在注册/登录操作中进行一些后端验证时,如果出现错误,我不知道如何传递要呈现的错误。
我已经尝试过 PRG 模式,它工作正常。我得到了带有保留数据的表单上显示的错误,但 PRG 不是这样做的方法。
在不使用 ajax 验证或移动使用 RegistrationForm/LoginForms 的控制器中的这些方法的情况下,有什么替代解决方案?
由于后台使用会话,我想跳过使用 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");}
}
【问题讨论】:
-
您是在谈论为已输入的信息显示验证错误,还是为需要在单独的错误页面上显示的错误消息?我问的原因是你说PRG不是通向它的方法吗?我们可以查看您的控制器操作以更好地理解这一点吗?
-
不是一种方法,因为 PRG 是为了防止 x 表单发布,这不是这里的情况。
标签: asp.net-mvc-3 post-redirect-get