asp.net-mvc - 为什么我的 View 模型名称必须是 'model' ?

标签 asp.net-mvc

我使用 MVC 已经有一段时间了。我制作了一个表单来使用实体模型提交数据,并且根据要求也必须添加标签,因此我更新了 View 和操作方法以使用 View 模型。像这样:

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

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

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

令人惊讶的是,我现在得到了模型中的数据。 我知道我可以这样工作,但如果我真的需要通过模型对象命名“模型”以外的其他东西。这里发生了什么?

最佳答案

它不必命名为模型

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

参数可以任意命名,但不能与模型中的属性之一同名。

原因是您的表单将发送回一个名称/值对,即(例如)post=someValueDefaultModelBinder 查找匹配的名称,将名为 Post 的属性值设置为 someValue,但同时也会查找名为 的参数post 并尝试将其设置为 someValue,但失败了(因为您无法执行 PostwTagsVM post = "someValue";),并且模型变为

关于asp.net-mvc - 为什么我的 View 模型名称必须是 'model' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47708441/

相关文章:

c# - 使用google Drive SDK下载文件

asp.net-mvc - 如何在 ASP.NET MVC 中将参数传递给局部 View ?

asp.net-mvc - NuGet 不显示已安装的包

asp.net-mvc - SQL CE 4.0 还是 SQL Express? Orchard 说的对吗?

c# - ASP.net MVC - 自定义 HandleError Filter - 根据异常类型指定 View

ASP.NET核心: Unobtrusive validation not working

asp.net-mvc - VB 中的 ASP NET MVC 区域路由/多路由问题

asp.net - 图像在 asp.net 中不显示

c# - 如何从代码中获取 customErrors 的 defaultRedirect 值?

asp.net-mvc - 上下文菜单中缺少 ASP MVC 5 项目 'New Scaffolded Item...'