我需要帮助来理解这件事。
假设我有一个像这样的行动
[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)
然后action方法的id将具有值2,我们将看到编辑视图。
现在,当我更改网址中的ID时(例如http://url.com/controller/Edit/4) 并向其他ActionMethod提交(POST),id仍将具有值2.(而不是4!我期望的那样)
这是为什么?有人可以向我解释一下吗?
谢谢!
答案 0 :(得分:0)
ASP.NET MVC按以下顺序使用值提供程序:
因此,当模型绑定器尝试查找参数id
的值时,它首先在请求中查找表单数据。因此,您传递的Model
具有名称为id
的属性,其表单数据将如下所示:
id=2&name=foo
因此它成功地在表单数据中找到名为id
的参数匹配,并且不会进一步分析路由数据或查询字符串。
如果您要修改请求中传递的表单数据并删除id=2
部分,则查询字符串中的id参数将同时用于操作的模型和id参数。
你不能在这里使用自动绑定,但你总是可以手动获取查询字符串参数(虽然我发现这种方法非常混乱 - 更好的方法将使用id
参数的不同名称):
string id = Request.QueryString.Get("id");