我有一个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]
的效用是什么?
答案 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请求的候选方法。