ASP.NET MVC剃刀视图,从原始模型绑定发布到不同的模型?

Lor*_*ill 1 c# asp.net-mvc model-binding razor asp.net-mvc-5

我在项目中有一个组控制器和视图,其中模型绑定是GroupViewModel.但是组页面很复杂,用户可以进行讨论主题.在此组视图页面上,我有表单,允许用户发布主题/回复.用于这些表单的模型可以是TopicViewModel或ReplyViewModel,但原始模型绑定仅适用于GroupViewModel.它在cshtml页面的开头声明:

@model MyProject.ViewModels.GroupBrowseViewModel
Run Code Online (Sandbox Code Playgroud)

所以我想知道,是否有可能将表单从顶部声明的表单绑定到不同的视图模型?如果是这样,如何实现这一目标?

Eri*_*sch 5

模型绑定实际上与剃刀视图中使用的模型无关.至少在技术上不是这样.

你必须要了解的第一件事是这里没有魔力.这是直接的HTTP发布值,如果您不了解HTTP发布的工作原理,我建议您阅读它.它只是一系列名称/值对.

发布时,路由框架会查看所选的操作方法以及该方法所采用的参数,然后创建这些参数的新实例,并尝试将它们与发布值中的类似命名值进行匹配.

因此,换句话说,您在页面上使用的模型与发布的控制器操作中使用的模型之间没有直接连接.这一切都基于命名约定.此命名约定由您在页面上声明的模型"帮助",并且Html帮助程序创建表单字段,其名称与模型条目匹配,以便模型绑定器可以更轻松地计算出这些.

因此,这意味着,为了使用不同的模型发布到不同的操作,您需要的只是表单中具有新模型所期望的名称的字段.

这可以通过多种方式完成,从手动定义这些字段到使用部分视图,在该视图中,您将要发布的模型实例作为模型参数传递给它.