剃刀视图 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 中的多个模型的主要内容,如果未能解决你的问题,请参考以下文章