使用razor中的方法post传递参数

时间:2013-06-17 16:49:01

标签: c# asp.net .net asp.net-mvc razor

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

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

行动Index

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

通过defaut,方法是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]的效用是什么?

2 个答案:

答案 0 :(得分:1)

下午好,如果你使用Nuget的MVCContrib扩展,你可以添加一个属性,你可以添加到你的控制器,PassParametersDuringRedirect,这将允许你做你想做的事情。

然后你可以打电话

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

没问题。

答案 1 :(得分:1)

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

至于你的具体问题:

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

该属性可以告诉框架应该使用带注释的方法来满足来自客户端的POST请求(而不是GET请求,这是默认设置)。它实际上并不会改变操作的行为,并且(在您的情况下)它不会通过RedirectToAction之类的内容更改请求发送到方法的方式。

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