C# 在razor中用post方法传递参数
我有一个asp.net mvc4应用程序,我想在其中将一个对象C# 在razor中用post方法传递参数,c#,asp.net,.net,asp.net-mvc,razor,C#,Asp.net,.net,Asp.net Mvc,Razor,我有一个asp.net mvc4应用程序,我想在其中将一个对象user作为参数从操作传递到其他操作: User _u = new User(); if (_fonction == "User") { return RedirectToAction("Index", "User", _u ); } 操作索引 public ActionResult Index(User u) { return View(); } 通
user
作为参数从操作传递到其他操作:
User _u = new User();
if (_fonction == "User")
{
return RedirectToAction("Index", "User", _u );
}
操作索引
public ActionResult Index(User u)
{
return View();
}
通过defaut,方法是GET
,在本例中,它是有效的。但是我想使用Post
方法,所以我将[HTTPPOST]
放在索引
操作之前,但是出现了一个异常
如果我改为:
if (_fonction == "User")
{
if (_is_admin == true) return RedirectToAction("Index");
else
{
Session["user"] = _u;
return RedirectToAction("Index", "User");
}
}
及
这很有效
那么属性
[HttpPost]
的实用性是什么呢?下午好,如果您使用Nuget的MVCContrib扩展,那么您可以向控制器添加一个属性PasspParametersDuringRedirect,它将允许您执行您尝试执行的操作
然后你可以打电话
this.RedirectToAction("Index", "User", _u);
没有问题。正如@SLaks所指出的,您无法通过HTTP重定向执行POST,这是您面临的核心问题。使用会话状态可能是一个建议的选项 关于你的具体问题:
So what is the utility of the attribute [HttpPost]?
该属性用于告诉框架应该使用带注释的方法来满足来自客户端的POST请求(与GET请求相反,GET请求是默认的)。它实际上不会改变操作的行为,并且(在您的情况下)不会改变通过RedirectToAction
之类的方式将请求发送到方法的方式
应用该方法时收到的异常很可能是因为
重定向到操作
只能在[HttpGet]
方法上执行。应用了[HttpPost]
属性后,您的方法将不再是处理GET请求的候选方法。错误说明了什么?您无法通过HTTP重定向执行POST。考虑使用会话状态。资源未被发现,<>代码> [HtpStp] < /Cord>需要一个POST请求,这在您的情况下是不适用的。
So what is the utility of the attribute [HttpPost]?