【发布时间】:2015-10-26 00:07:09
【问题描述】:
让我假设我正在从 Classic ASP 过渡到 .net,所以我的 .net 知识都是通过书本获得的,而不是使用。我正在开发一个购物车平台,我的任务是创建 3 种不同的显示类型(水平滑块、垂直滑块和网格),它们将能够被 2 种不同的模型使用。
我将新视图用于我的第一个模型,并认为我很清楚并插入了第二个模型,但后来我开始收到关于模型不同的错误。我正在尝试找出处理此问题的最佳方法。我想出的解决方案是
使用视图模型 - 这似乎只应在您需要将 2 个模型合并为一个时使用,而这实际上与我需要的相反,我需要让 1 个视图为 2 个工作模型。
为每种类型制作单独的视图。这似乎合乎逻辑,但会产生 5 个与我已经创建的几乎相同的新视图文件,这似乎是多余的。
-
使用 renderPartial 并转换模型 - 我什至不知道如何实现这一点,但我的想法是在实际显示的创建(水平滑块、垂直滑块和网格视图)中渲染部分
我很难确定最佳行动方案是什么。我知道使用 MVC 和 .net,你不应该对相同的东西进行两次编码,我认为制作单独的视图就是这样做的。任何关于如何最好地解决此问题的想法将不胜感激。
【问题讨论】:
-
视图是模型的可视化表示,因此如果要显示 2 个不同的模型,则需要 2 个不同的视图(或局部视图)
-
最初这 2 个不同的模型会各自进入自己的视图,但随后都以相同的视图结束,但它们都以不同的方式发送到相同的视图,其中一个使用了我的 Html.Action猜测用于转换它,而另一个使用 DisplayFor,这就是为什么我认为这可以通过重用相同的视图来完成。
-
不清楚您上次评论的意思,但如果视图几乎相同,那么您可以将主视图或布局用于常见的 html 和部分视图 (@987654321 @ 或
@Html.Action()或EditorTemplates用于模型特定的 html。 -
ViewModel 旨在封装 View 所需的信息。我不明白你为什么不制作另一个 ViewModel 将你需要的所有东西都封装到一个中?
-
在一个视图中使用多个模型的最佳方式是局部视图。如果其他模型使用不是主要的,或者你想使用它的一个属性,那么在 action 方法中使用 viewbag 或 viewdata
标签: asp.net asp.net-mvc asp.net-mvc-4 razor models