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!)
为什么会这样?有人能给我解释一下吗?
谢谢!
ASP.NET MVC按以下顺序使用值提供程序:
- 以前绑定的操作参数,当操作是子操作时
- 表单字段
- JSON请求正文中的属性值(用于AJAX请求)
- 路线数据
- Querystring参数
- 已发布的文件
因此,当模型绑定器试图查找参数id
的值时,它首先在请求中查找表单数据。因此,您正在传递具有名称为id
的属性的Model
表单数据将看起来像:
id=2&name=foo
因此,它成功地在表单数据中找到了名为id
的参数的匹配项,并且不再进一步分析路由数据或查询字符串。
如果您要修改请求中传递的表单数据并删除id=2
部分,那么查询字符串中的id参数将用于操作的模型和id参数。
您不能在这里使用自动绑定,但您总是可以手动获取查询字符串参数(尽管我发现这种方法非常令人困惑——更好的方法是为id
参数使用不同的名称):
string id = Request.QueryString.Get("id");
建议阅读:ASP.NET MVC模型绑定的特性和功能