在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]的效用是什么呢?

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

正如@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);