POST视图后返回GET视图失败ASP.NET MVC

Alb*_*erd 2 asp.net-mvc views http-post

我在MVC中有一个名为Action的View,它接受和ID作为参数.我还有另一个名为Action的视图,但它被标记为HTTPPOST.

Action的POST版本可能以编程方式失败.当它失败时,我想添加一个ModelError,然后重定向到Action的GET版本,同时我提供ID.

简而言之=>我想从POST视图转移到GET视图,并传递参数.有点像

ModelState.AddModelError("", "Could not verify token");
return RedirectToAction("Action", "ExpiredAccounts" new { aid = myId });
Run Code Online (Sandbox Code Playgroud)

其中Action是View,ExpiredAccounts是Controller,AID是Account ID.这当然不起作用,因为您可以向视图添加模型错误,而不是重定向

谢谢

Dar*_*rov 8

在这种情况下,您最好返回相同的视图,而不是重定向:

ModelState.AddModelError("", "Could not verify token");
var model = repository.Get(myId);
return View(model);
Run Code Online (Sandbox Code Playgroud)

模式的正确流程Redirect-After-Post如下:

  1. GET请求 - >显示某个表单
  2. POST请求 - >表单提交给服务器.两种可能的情况:
    • 验证成功=>重定向.
    • 验证失败=>重新显示相同的视图,以便用户可以修复错误

如果您想违反此最佳做法,您可以在重定向时始终将错误消息作为查询字符串参数发送:

return RedirectToAction(
    "Action", 
    "ExpiredAccounts" 
    new { aid = myId, error = "Could not verify token" }
);
Run Code Online (Sandbox Code Playgroud)

然后在目标操作中验证是否已提供此参数并向模型状态添加错误:

public ActionResult Action(int myId, string error)
{
    if (!string.IsNullOrEmpty(error))
    {
        ModelState.AddModelError("", error);
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)