C# 在razor中用post方法传递参数

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(); } 通

我有一个asp.net mvc4应用程序,我想在其中将一个对象
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]?