0

我有一个 asp .net mvc4 应用程序,我想在其中将一个对象user作为参数从操作传递给其他应用程序:

 User _u = new User();
  if (_fonction == "User")
  {
    return RedirectToAction("Index", "User", _u );
  }

那个行动Index

 public ActionResult Index(User u)
        {
            return View();
        }

默认情况下,该方法是GET,在这种情况下它是有效的。但我想使用该Post方法,因此我将其放在操作[HTTPPOST]之前,Index但出现异常。

如果我更改为:

 if (_fonction == "User")
            {
                if (_is_admin == true) return RedirectToAction("Index");
                else
                {
                    Session["user"] = _u;
                    return RedirectToAction("Index", "User");
                }
            }

public ActionResult Index()
        {
            ViewBag.user = Session["user"];
            return View(Session["user"]);
        }

其作品。

那么属性的用途是什么[HttpPost]

4

2 回答 2

1

下午好,如果您使用来自 Nuget 的 MVCContrib 扩展,您可以将一个属性添加到您的控制器中,即 PassParametersDuringRedirect,它可以让您做您想做的事情。

然后你可以打电话

this.RedirectToAction("Index", "User", _u); 

没有问题。

于 2013-06-17T18:28:29.097 回答
1

正如@SLaks 所指出的,您无法通过 HTTP 重定向执行 POST,这是您遇到的核心问题。建议使用会话状态可能是一个选项。

至于你的具体问题:

So what is the utility of the attribute [HttpPost]?

该属性用于告诉框架应使用带注释的方法来满足来自客户端的 POST 请求(而不是默认的 GET 请求)。它实际上并没有改变动作的行为,并且(在你的情况下)它不会改变请求通过诸如RedirectToAction.

RedirectToAction应用方法时收到的异常很可能是只能在方法上执行的事实的结果[HttpGet]。应用[HttpPost]属性后,您的方法将不再是处理 GET 请求的候选方法。

于 2013-06-17T18:54:24.840 回答