将自定义视图对象从Controller传递到View

时间:2017-11-06 09:31:00

标签: c# asp.net-mvc

我有一个简单的问题。在我的控制器中,我连接两个表并返回如下:

data = ...
select new { Contacts = item, Applications = items, Answers = j } 

这很好用。我得到了我想要的东西:例如62个具有我想要的属性的数据对象。

但是在视图中我如何访问这些数据点?

简单@model dynamic不起作用?必须有一些方法来做到这一点。

3 个答案:

答案 0 :(得分:6)

最好的方法是创建一个ViewModel,它将包含您需要在视图中显示的所有属性。

 public class DataViewModel {
      public Contacts {get;set}
      public Application {get;set;}
      public Answers {get;set;}
   }

创建" DataViewModel"

的列表
List<DataViewModel> Datas = new List<DataViewModel>();

完成此操作后,您必须在从&#34;数据&#34;中获取后,在控制器中分配每个元素的值。通过简单地使用foreach循环创建的变量。

foreach (var instance of data) {
// Assign those values here
} 

您必须将数据列表(ViewModel)从控制器传递到您的视图,如下所示:

return View(Datas);

并在您的视图中调用ViewModel列表,如下所示:

@model IEnumerable<models.DataViewModel>

答案 1 :(得分:2)

创建一个&#39;保护伞&#39;模特如:

public DataModel
{
   public Contacts contacts {get;set}
   public Application  applications {get;set;}
   public Answers  answers {get;set;}
}

在控制器上:

select new DataModel(){ Contacts = item, Applications = items, Answers = j }

并查看:

@model DataModel

答案 2 :(得分:0)

班级

public DataModel
{
   public Contacts {get;set}
   public Application {get;set;}
   public Answers {get;set;}
}

控制器

DataModel model = new DataModel();
model.Contacts  = items;
model.Application = item;
model.Answers= items;
return View(model);

查看

@model DataModel

// will get all three tables data here

@Model.Contacts 
@Model.Application
@Model.Answers