C# asp.net mvc-如何将多个viewmodels绑定到一个视图

C# asp.net mvc-如何将多个viewmodels绑定到一个视图,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,我是c#的新手,所以请原谅这个愚蠢的问题。我正在使用asp.net mvc创建一个Web应用程序。在导航栏上,我有一个按钮,用于显示包含表单的模式。现在,所有这些都在_Layouts.cshtml共享视图中完成。为了捕获表单post,我使用ViewsModel,然后将其传递给控制器进行处理。现在的问题是,除非我使用单独的共享视图,否则这会将该模型加载到webapp中加载的每个视图中。现在,这阻止我将模型从控制器传递回视图 目前,我已经创建了一个名为MasterViewModel的模型,该模型将其

我是c#的新手,所以请原谅这个愚蠢的问题。我正在使用asp.net mvc创建一个Web应用程序。在导航栏上,我有一个按钮,用于显示包含表单的模式。现在,所有这些都在_Layouts.cshtml共享视图中完成。为了捕获表单post,我使用ViewsModel,然后将其传递给控制器进行处理。现在的问题是,除非我使用单独的共享视图,否则这会将该模型加载到webapp中加载的每个视图中。现在,这阻止我将模型从控制器传递回视图

目前,我已经创建了一个名为MasterViewModel的模型,该模型将其他视图模型作为属性,但这仍然阻止我将模型传递给视图


有人对如何解决这个问题有什么建议吗?

有!你当然可以

有很多方法,但有两种我最喜欢

1.)查看包

使用这个方法很简单,您可以简单地将控制器中的视图包设置为类似于
Viewbag.Example=YourViewModelHere

然后通过说出
@Viewbag.Example.Attribute

2.)局部视图

另一个好方法是保持体系结构井然有序,每个视图只有一个视图模型。(我更喜欢这种方法)

通过这种方式,您可以坚持将单个视图模型传递给单个页面的方式。出于某种原因,我最倾向于使用这种方式,但其中一种并不一定比另一种好。这最终更多的是一种偏好

3.)包装类

将视图模型包装在父类中,并将parrent类作为视图模型传入。这将允许您访问这些单独的视图模型,例如:

@Model.ViewModelA
@Model.ViewModelB

有关不同方法的单个示例,请查看此帖子。当我站在你的立场上时,它帮助了我:

应该阻止
ViewBag
方法。那样的话,你的打字能力就会下降。局部视图并不能真正解决问题,所以我不确定你要做什么,除非你真正谈论的是一个儿童动作(通常使用局部视图)。实际上,最好的方法要么是1)一个包含这两种方法的包装器类,这样你就可以传递该包装器的一个实例,然后一个一个得到两个,或者2)一个子动作得到两个!我同意你们的观点,这是一种懒惰的方式。但是,对于局部视图,我要说的是,每个视图不使用多个视图模型。通常情况下,将所有内容塞进一个视图并不是正确的选择。使用自己的视图包分解为多个视图有时是更好的方法(有时)。