如何将数据从多个控制器返回到视图?

时间:2012-10-15 21:43:31

标签: asp.net-mvc ef-code-first

这必须是一种常见的情况,也许我只是在寻找错误的条款......

我有一个使用EF Code First的ASP.NET MVC项目。

我有一个用于电子邮件类型的对象/表/控制器(例如,家庭,工作,学校)。对象很简单,只是一个ID和一个Name字段。这样可以轻松管理各种电子邮件类型。

我有另一个用于电子邮件的对象/表/控制器。它有一个ID,名称(例如bob@me.com)和EmailType属性。

在我创建新电子邮件的视图中,我有一个文本框来输入电子邮件地址。 我还需要在其中放置一个下拉列表,以便可以选择EmailType并将其分配给电子邮件。我认为这是非常标准的东西。

所以......在我的EmailController中, Create()函数只返回一个View()。

我还需要返回数据以填充EmailType下拉列表。

我如何做到这一点?

(注意:我想我可以使用JQuery / AJAX来提取这些数据,我也可以将其填入ViewBag或类似的东西,但似乎应该有更直接的方式?)

1 个答案:

答案 0 :(得分:3)

根据我的经验,严格按每个实体设置一个控制器是徒劳的。也就是说,控制器动作可以并且应该能够与多种类型的实体一起使用。我认为在这种情况下最好的选择是将用于检索EmailTypes列表的代码抽象为服务类,然后从EmailController.Create()EmailTypesController.Index()调用它。

然后,您可以将属性IList<SelectListItem> EmailTypes { get; set; }添加到EmailController.Create()操作视图的ViewModel。