剃刀视图 MVC 中的多个模型

Posted

技术标签:

【中文标题】剃刀视图 MVC 中的多个模型【英文标题】:Multiple models in razor view MVC 【发布时间】:2016-12-13 19:59:09 【问题描述】:

我们正在尝试使用 .NET MVC 和 razor 视图进行食品订单和交付 Web 应用程序。 但是我们在同一视图页面中使用多个模型时遇到了问题。我们为这个问题找到了一些解决方案,但它们在我们的实现中效果不佳。

基本上,我是在 Register.cshtml 中实现餐厅老板的注册系统。同样的观点,我也为普通用户进行了注册。如果选中“餐厅老板”复选框,用户必须输入他的餐厅信息并使用同一控制器进行注册。所以如果复选框被选中,我也需要访问餐厅模型。

-我们尝试使用 Tuple,但它不适用于 foreach 和 MVC 绑定函数,例如 Html.DropDownList()。

我们也可以尝试将两个模型合并到一个视图模型中,但是这样做看起来太暴力了,如果我们将这种方法用于我们需要的每个双模型组合,将会有太多的代码重复。

您能否帮助我们找到在 1 个视图中使用 2 个模型的替代方法?

【问题讨论】:

google 关于 ViewModels in mvc 您只能有一个模型供您查看。您应该创建一个复合视图模型。这不是蛮力。我知道的唯一另一种选择是对一个模型使用 ViewBag 元素,对另一个使用 Model。 @Michael_B 非常感谢,如果不是蛮力方法,我会使用它:)) 【参考方案1】:

简单来说,您无法访问视图中多个模型的数据,因为您在每个视图顶部指定了类似 @model WebApplication88.Models.YourModel 的内容。此视图只能引用来自此YourModel 的数据。

但是对于您可以在每个视图顶部引用的模型/模型列表没有限制。所以添加一个新类YourViewModel 填充它所有您想要在视图中访问的所需数据,并将其从控制器传递给视图。

阅读本文了解更多信息Multiple Models in Single View in MVC。

另请参阅this code project article on handling multiple models in a single view。

【讨论】:

【参考方案2】:

首先,您不能有多个视图模型,因为它违背了 MVC 的所有观点。所以你有两个选择:

    ViewModel:根据用户和餐厅模型以及所有属性的组合创建视图模型。

    将餐厅对象添加到您的用户模型并在用户是餐厅所有者时填充,否则将其保留为空。

【讨论】:

以上是关于剃刀视图 MVC 中的多个模型的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据从剃刀视图传递到 mvc3 中的控制器?

剃刀页面视图模型类中的 Url.Action 备用

asp.net mvc,剃刀部分视图-布尔属性未显示

是否可以将单个MVC剃刀视图/页面转换为SPA?

如何在 mvc 视图中将剃刀值传递给 jquery 函数

在混合 MVC3 项目中,剃刀视图优先于 aspx