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

时间:2013-05-17 23:37:34

标签: 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 });

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

由于

1 个答案:

答案 0 :(得分:8)

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

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

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

  1. GET请求 - >显示某种形式
  2. POST请求 - >表单提交给服务器。两种可能的情况:
    • 验证成功=>重定向。
    • 验证失败=>重新显示相同的视图,以便用户可以修复错误
  3. 如果您想违反此最佳做法,您可以在重定向时始终将错误消息作为查询字符串参数发送:

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

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

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