Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 如何在ASP.NET MVC 3控制器中执行错误处理?_Asp.net Mvc 3_Post Redirect Get - Fatal编程技术网

Asp.net mvc 3 如何在ASP.NET MVC 3控制器中执行错误处理?

Asp.net mvc 3 如何在ASP.NET MVC 3控制器中执行错误处理?,asp.net-mvc-3,post-redirect-get,Asp.net Mvc 3,Post Redirect Get,我有一名账户控制员,该控制员具有: LoginForm(获取操作) 登录(操作后) 注册执行(获取操作) 登记册(行动后) 在另一个控制器的索引操作中,我将它们用作渲染: Html.RenderAction(“注册表单”、“账户”) RenderAction(“LoginForm”、“Acount”) 一切正常,我可以注册一个新用户,登录和验证与不引人注目的验证 问题在于何时在Register/Login操作中执行一些后端验证,如果出现错误,我不知道如何传输要呈现的错误 我试过PRG模式

我有一名账户控制员,该控制员具有:

  • LoginForm(获取操作)
  • 登录(操作后)
  • 注册执行(获取操作)
  • 登记册(行动后)
在另一个控制器的索引操作中,我将它们用作渲染:

  • Html.RenderAction(“注册表单”、“账户”)
  • RenderAction(“LoginForm”、“Acount”)
一切正常,我可以注册一个新用户,登录和验证与不引人注目的验证

问题在于何时在Register/Login操作中执行一些后端验证,如果出现错误,我不知道如何传输要呈现的错误

我试过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");
    }
}


您可以使用以下方法在post控制器内手动将错误添加到
ModelState

ModelState.AddModelError("", @"You didn't perform task XYZ");
然后,您应该能够返回视图并在验证摘要中显示错误:

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

您所说的是显示已输入信息的验证错误,还是显示需要在单独的错误页面上显示的错误消息?我问的原因是你说PRG不是实现它的方式?我们可以查看控制器的操作以更好地理解这一点吗?这不是一种方法,因为PRG是阻止x form post的,这里不是这种情况。我这样做,但问题是我无法返回承载RegisterPerform和LoginForm的视图,因为它位于另一个控制器中。如果我重定向到action,那么我必须prg并使用我不想使用的tempview。
@Html.ValidationSummary(false, "Login was unsuccessful because...")