我使用 MVC 已经有一段时间了。我制作了一个表单来使用实体模型提交数据,并且根据要求也必须添加标签,因此我更新了 View 和操作方法以使用 View 模型。像这样:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(PostwTagsVM post)
{
}
令人惊讶的是,该模型为空。我无法找出原因,但后来决定将对象重命名为如下:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(PostwTagsVM model)
{
}
令人惊讶的是,我现在得到了模型中的数据。 我知道我可以这样工作,但如果我真的需要通过模型对象命名“模型”以外的其他东西。这里发生了什么?
最佳答案
它不必命名为模型
。
如果在第一种情况下,您的模型为 null
,这是因为您的 PostwTagsVM
模型包含名为 post
的属性。
参数可以任意命名,但不能与模型中的属性之一同名。
原因是您的表单将发送回一个名称/值对,即(例如)post=someValue
。 DefaultModelBinder
查找匹配的名称,将名为 Post
的属性值设置为 someValue
,但同时也会查找名为 的参数post
并尝试将其设置为 someValue
,但失败了(因为您无法执行 PostwTagsVM post = "someValue";
),并且模型变为 空
。
关于asp.net-mvc - 为什么我的 View 模型名称必须是 'model' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47708441/