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

Asp.net mvc 如何将数据从多个控制器返回到视图?,asp.net-mvc,ef-code-first,Asp.net Mvc,Ef Code First,这一定是一种常见的情况,也许我只是在寻找错误的术语 我有一个ASP.NETMVC项目,首先使用EF代码 我有一个对象/表/控制器用于电子邮件类型(例如家庭、工作、学校)。对象很简单,只有一个ID和一个名称字段。这使得管理各种电子邮件类型变得容易 我有另一个电子邮件对象/表/控制器。它有一个ID、名称(例如。bob@me.com)和EmailType属性 在我看来,要创建新的电子邮件,我有一个文本框来输入电子邮件地址。 我还需要在那里放置一个下拉列表,以便可以选择电子邮件类型并将其分配给电子邮件。

这一定是一种常见的情况,也许我只是在寻找错误的术语

我有一个ASP.NETMVC项目,首先使用EF代码

我有一个对象/表/控制器用于电子邮件类型(例如家庭、工作、学校)。对象很简单,只有一个ID和一个名称字段。这使得管理各种电子邮件类型变得容易

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

在我看来,要创建新的电子邮件,我有一个文本框来输入电子邮件地址。 我还需要在那里放置一个下拉列表,以便可以选择电子邮件类型并将其分配给电子邮件。我认为这是相当标准的东西

所以。。。在my EmailController中,Create()函数只返回一个视图()

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

我如何做到这一点


(注意:我想我可以使用JQuery/AJAX将这些数据拉入,我也可以将其塞进ViewBag或类似的东西,但似乎应该有一种更直接的方法?

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


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

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

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