为什么我的viewmodel名称必须是'model'?

时间:2017-12-08 05:47:20

标签: asp.net-mvc

我已经和MVC合作了很长一段时间。我创建了一个表单来使用实体模型提交我的数据,并且根据要求也必须添加标签,所以我更新了视图和action方法来改为使用viewmodel。像这样:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(PostwTagsVM post)
{
}

令人惊讶的是,该模型为null。我找不到原因,但后来决定将对象重命名如下:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(PostwTagsVM model)
{
}

令人惊讶的是,我现在获得了模型中的数据。 我知道我可以像这样工作,但如果我真的需要用模型对象命名除了'model'之外的其他东西。这是怎么回事?

1 个答案:

答案 0 :(得分:3)

不必将其命名为model

如果在第一种情况下,您的模型为null,那是因为您的PostwTagsVM模型包含名为post的属性。

该参数可以任意命名,但它不能与模型中的某个属性名称相同。

原因是您的表单会发回(例如)post=someValue的名称/值对。 DefaultModelBinder查找匹配的名称,将名为Post的属性的值设置为someValue,但随后还会找到名为post的参数并尝试将其设置为{ {1}}失败(因为您无法执行someValue),模型变为PostwTagsVM post = "someValue";