在razor中使用post方法传递参数
本文关键字:方法 参数 post razor | 更新日期: 2023-09-27 18:18:41
我有一个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]
的效用是什么呢?
正如@SLaks指出的那样,您不能通过HTTP重定向执行POST,这是您遇到的核心问题。使用会话状态可能是建议的选项。
关于你的具体问题:
So what is the utility of the attribute [HttpPost]?
该属性用于告诉框架应该使用带注释的方法来满足来自客户机的POST请求(与默认的GET请求相反)。它实际上不会改变动作的行为,并且(在您的情况下)它不会改变如何通过RedirectToAction
之类的东西将请求发送到方法。
应用该方法时收到的异常很可能是RedirectToAction
只能在[HttpGet]
方法上执行的事实的结果。应用[HttpPost]
属性后,您的方法将不再是处理GET请求的候选方法。
下午好,如果你使用MVCContrib扩展从Nuget有一个属性,你可以添加到你的控制器,pasparametersduringredirect,这将允许你做你想做的事情。
你可以调用
this.RedirectToAction("Index", "User", _u);