这必须是一种常见的情况,也许我只是在寻找错误的条款......
我有一个使用EF Code First的ASP.NET MVC项目。
我有一个用于电子邮件类型的对象/表/控制器(例如,家庭,工作,学校)。对象很简单,只是一个ID和一个Name字段。这样可以轻松管理各种电子邮件类型。
我有另一个用于电子邮件的对象/表/控制器。它有一个ID,名称(例如bob@me.com)和EmailType属性。
在我创建新电子邮件的视图中,我有一个文本框来输入电子邮件地址。 我还需要在其中放置一个下拉列表,以便可以选择EmailType并将其分配给电子邮件。我认为这是非常标准的东西。
所以......在我的EmailController中, Create()函数只返回一个View()。
我还需要返回数据以填充EmailType下拉列表。
我如何做到这一点?
(注意:我想我可以使用JQuery / AJAX来提取这些数据,我也可以将其填入ViewBag或类似的东西,但似乎应该有更直接的方式?)
答案 0 :(得分:3)
根据我的经验,严格按每个实体设置一个控制器是徒劳的。也就是说,控制器动作可以并且应该能够与多种类型的实体一起使用。我认为在这种情况下最好的选择是将用于检索EmailTypes列表的代码抽象为服务类,然后从EmailController.Create()
和EmailTypesController.Index()
调用它。
然后,您可以将属性IList<SelectListItem> EmailTypes { get; set; }
添加到EmailController.Create()
操作视图的ViewModel。