2017-07-25 51 views
0

我是新来的c#所以请原谅愚蠢的问题。我正在使用asp.net mvc创建一个webapp。在导航栏上我有一个按钮,可以调出包含表单的模式。现在这一切都在_Layouts.cshtml共享视图中完成。为了捕获表单文章,我使用ViewsModel,然后将其传递给控制器​​进行处理。现在的问题是,除非我使用单独的共享视图,否则这会将该模型加载到加载到webapp中的每个视图中。现在,这阻止我将模型从控制器传递回视图。asp.net mvc - 我怎么可以有多个viewmodels绑定到视图

在我创建了一个名为MasterViewModel模型,它具有其他视图模型的性能,但仍阻止我从通过模型来查看那一刻...

有没有人对如何解决任何意见这个问题?

回答

0

是的!你当然可以!

但有很多方法,但有2我最喜欢。

1)的ViewBag

这一个很简单的,你可以简单地设置视图袋在您的控制器是沿着Viewbag.Example = YourViewModelHere

线的东西,然后访问它的视图说@Viewbag.Example.Attribute

2)局部视图

另一个好办法是保持你的架构很好地组织,并且每个视图只有一个视图模型。 (我更喜欢这种方法

这样,您可以坚持您已经将单一视图模型移交给单个页面的方式。出于某种原因,我倾向于最大限度地使用这种方式,但一方不一定比另一方好。最后更多的是偏好。

3)包装类

环绕你的视图模型在父类和传递parrent类作为视图模型。这将允许您访问这些个人看法等车型的话说:

@Model.ViewModelA 
@Model.ViewModelB 

对于个别例子的不同的方式看看这个帖子。它帮助我,当我在你的鞋子:https://stackoverflow.com/a/4765113/5874935

+1

应该劝阻'ViewBag'方法。你正在以这种方式打字。局部视图并不能真正解决这个问题,所以我不确定你要去哪里,除非你实际上谈论的是一个子动作(通常使用局部视图)。真的最好的方法是1)一个包含两者的包装类,所以你可以传递一个包装的实例来取而代之,或者2)一个子操作。 –

+0

我没有想到这个包装方法!我同意你的观点,这是一种懒惰的方式来做到这一点。但是,对于局部视图来说,我所说的是每个视图不要使用多个视图模型。常常把所有东西都塞进一个视图并不是正确的选择。用自己的视角分解成多个视图袋有时候会更好(有时)。 –

相关问题