传递多个对象以通过控制器查看

时间:2012-03-23 14:28:45

标签: c# asp.net asp.net-mvc

我正在开发一个asp.net mvc网络应用程序,其中我想通过Controller发送2个对象现在我只通过控制器发送一个对象

return View(repository.func(id));

并且在视野中我正在

<% var data = Model.First %>

但现在我很困惑如何发送2个对象以及如何获取它。

4 个答案:

答案 0 :(得分:4)

(学习)使用ViewModel的绝佳机会:

class MyViewModel { ... }


// and in the Action:
var view = new MyViewModel();
view.First = repository.func(id) ;
view.Second  = ....;    
return View(view);

答案 1 :(得分:1)

您可以使用ViewBag(我个人不喜欢这种方法)或创建将同时包含两个值并将其用于视图模型的类

答案 2 :(得分:0)

我认为你的观点是强类型的,与你从中返回的类型相同:

repository.func(id)

让对象'Foo'

假设您使用的是强类型视图:

@model Foo

您可以将其更改为:

@model IEnumerable<Foo>

然后,您的视图将强类型化为Foo

的集合(IEnumerable)

在您看来,您可以这样做:

foreach(var foo in Model)
{
    //Do stuff
}

当然,您的存储库方法必须返回一组对象(通过实现IEnumerable的东西 - 例如List&lt;&gt;)

答案 3 :(得分:0)

只是略微阐述了Henk的答案

class MyViewModel {
    TMyEntityType1 First { get; set; }
    IQueryable<TMyEntityType2> Second { get; set; }
}

然后在操作中收集您的2组数据并将其存放在MyViewModel的实例中

var viewModel = new MyViewModel();
viewModel.First = repository.func(id);
viewModel.Second  = repository.containing("?");    
return View(viewModel);

您可能希望将其更改为:

<% var dataFirst = Model.First; 
   var dataSecond = Model.Second;%>

其中Model现在是MyViewModel类型而不是repository.func(id)的返回类型