2011-11-03 110 views
0

我在将多个模型传递给单个视图时遇到问题,在阅读了其他文章之后,我需要创建一个单独的类并实例化该类并将该实例化的类返回给风景。但是,我将如何做到这一点?将多个模型传递给视图

我想用Entity Framework和Linq做查询。如果你能提供给我学习的示例代码...

+1

[推荐本] [1] [1]:http://stackoverflow.com/questions/4764011/multiple-models-in-a-view –

回答

4

你既可以做到快速,肮脏的方式,使用动态:

dynamic viewdata = new ExpandoObject(); 
viewdata.object1 = Model1; 
viewdata.object2 = Model2; 

return View(viewdata); 

或者你可以做到这一点,并创建一个viewmodel。

class ViewModel1 { 
    public MyModel Model1 { get; set; } 
    public MyOtherModel Model2 { get; set; } 
} 

ViewModel1 viewdata = new ViewModel1(); 
viewdata.Model1 = Model1; 
viewdata.Model2 = Model2; 

return View(viewdata); 
+0

用于偏好viewModel的+1 –

0

使用

public ActionResult Index() 
{ 
    SomeClass1 object1 = new SomeClass1(); 
    SomeClass2 object2 = new SomeClass2(); 
    ViewData["someName1"]=object1; 
    ViewData["someName2"]=object2; 
    return View(ViewData); 
} 

在View页面,您可以访问它们为:

<% SomeClass1 object1 = ViewData["someName1"] as SomeClass1; %> 
<% SomeClass1 object2 = ViewData["someName2"] as SomeClass2; %> 
+0

我会去其他的答案,使用一个子ViewModel。所有这些魔术字符串和投射都可能会成为调试的痛苦,并且只会产生运行时错误。 – Syska

+0

@Syska“dynamic”关键字在c#4.0中引入! 那么之前的框架呢? – 1Mayur

+0

然后,我仍然会选择包含2个其他视图模型的ViewModel。除非你只是在一些本地项目中尝试一些东西,否则我并不真正看到这种收益。我也开始这样做,但最终......真正的夜晚。如果可以完成,我会避免使用动态的,除非我们可以像R#这样的一些intellisence试图提供,所以我们可以在构建过程中捕获错误。 – Syska

0

创建一个视图模型。视图模型是一种通常由其他模型组成的模型,并且不绑定到您的数据模型。 MvcMusic演示有一个使用视图模型的好例子。

虽然ViewData将工作其不是类型安全,基本上取决于魔术弦,所以我会避免它。