我已经和MVC合作了很长一段时间。我创建了一个表单来使用实体模型提交我的数据,并且根据要求也必须添加标签,所以我更新了视图和action方法来改为使用viewmodel。像这样:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(PostwTagsVM post)
{
}
令人惊讶的是,该模型为null。我找不到原因,但后来决定将对象重命名如下:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(PostwTagsVM model)
{
}
令人惊讶的是,我现在获得了模型中的数据。 我知道我可以像这样工作,但如果我真的需要用模型对象命名除了'model'之外的其他东西。这是怎么回事?
答案 0 :(得分:3)
不必将其命名为model
。
如果在第一种情况下,您的模型为null
,那是因为您的PostwTagsVM
模型包含名为post
的属性。
该参数可以任意命名,但它不能与模型中的某个属性名称相同。
原因是您的表单会发回(例如)post=someValue
的名称/值对。 DefaultModelBinder
查找匹配的名称,将名为Post
的属性的值设置为someValue
,但随后还会找到名为post
的参数并尝试将其设置为{ {1}}失败(因为您无法执行someValue
),模型变为PostwTagsVM post = "someValue";
。