C#MVC 4/5-Id存储在哪里

本文关键字:存储 在哪里 5-Id C#MVC | 更新日期: 2023-09-27 18:19:50

我需要帮助来理解这件事。

比方说我有一个像这样的动作

    [HttpGet]
    public ActionResult Edit(int id)
    {
      var model = new Model();
      return View(model);
    }

像这样的行动

    [HttpPost]
    public ActionResult Edit(Model model, int id)
    {
    }

问题:

当我执行GET请求时(例如。http://url.com/controller/Edit/2)

然后操作方法的id将具有值2,我们将看到编辑视图。

现在,当我更改URL中的Id时(例如。http://url.com/controller/Edit/4)并向另一个ActionMethod提交(POST),id的值仍然为2。(而不是我预期的4!)

为什么会这样?有人能给我解释一下吗?

谢谢!

C#MVC 4/5-Id存储在哪里

ASP.NET MVC按以下顺序使用值提供程序:

  1. 以前绑定的操作参数,当操作是子操作时
  2. 表单字段
  3. JSON请求正文中的属性值(用于AJAX请求)
  4. 路线数据
  5. Querystring参数
  6. 已发布的文件

因此,当模型绑定器试图查找参数id的值时,它首先在请求中查找表单数据。因此,您正在传递具有名称为id的属性的Model表单数据将看起来像:

id=2&name=foo

因此,它成功地在表单数据中找到了名为id的参数的匹配项,并且不再进一步分析路由数据或查询字符串。

如果您要修改请求中传递的表单数据并删除id=2部分,那么查询字符串中的id参数将用于操作的模型和id参数。

您不能在这里使用自动绑定,但您总是可以手动获取查询字符串参数(尽管我发现这种方法非常令人困惑——更好的方法是为id参数使用不同的名称):

string id = Request.QueryString.Get("id");

建议阅读:ASP.NET MVC模型绑定的特性和功能