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

2024-02-17

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

@model MyProject.ViewModels.GroupBrowseViewModel

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


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

你首先要明白的是,这里没有魔法。这是直接的 HTTP 发布值,如果您不了解 HTTP 发布的工作原理,我建议您阅读它。它只是一系列名称/值对。

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

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.NET MVC 剃刀视图,发布到与原始模型绑定不同的模型? 的相关文章

随机推荐