【问题标题】:Passing parameters with the method post in razor在razor中使用post方法传递参数
【发布时间】:2013-06-17 16:49:00
【问题描述】:

我有一个 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]有什么用处呢?

【问题讨论】:

  • 错误说明了什么
  • 您无法通过 HTTP 重定向执行 POST。考虑使用会话状态。
  • 找不到资源
  • [HttpPost] 的要点是要求 POST 请求,这不适用于您的情况。

标签: c# asp.net .net asp.net-mvc razor


【解决方案1】:

正如@SLaks 所指出的,您无法通过 HTTP 重定向执行 POST,这是您遇到的核心问题。建议使用会话状态可能是一个选项。

关于你的具体问题:

So what is the utility of the attribute [HttpPost]?

该属性用于告诉框架应使用带注释的方法来满足来自客户端的 POST 请求(而不是默认的 GET 请求)。它实际上并没有改变操作的行为,并且(在你的情况下)它不会改变通过RedirectToAction 之类的方式将请求发送到方法的方式。

您在应用该方法时收到的异常很可能是因为RedirectToAction 只能在[HttpGet] 方法上执行。应用 [HttpPost] 属性后,您的方法将不再是处理 GET 请求的候选方法。

【讨论】:

    【解决方案2】:

    下午好,如果您使用 Nuget 的 MVCContrib 扩展,您可以将一个属性添加到您的控制器中,即 PassParametersDuringRedirect,它可以让您做您想做的事情。

    然后就可以调用了

    this.RedirectToAction("Index", "User", _u); 
    

    没问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 2011-04-26
      相关资源
      最近更新 更多