如何在Asp.net mvc中处理包含大量下拉列表的模型

时间:2010-12-08 21:39:02

标签: asp.net-mvc asp.net-mvc-2

我有一个带有很多外键的模型。现在,我正在填充查看数据:

ViewData["fieldname"]=new selectlist(entityframeworkmodel.foreigntable.ToList(),"fieldkey","valuefield");

我真的不喜欢这种方法。首先,我应该将该字段命名为相同的东西并相信它将存储在模型中。我真的不明白它是如何工作的,但它有点令人担忧。

其次,我的代码现在有点乱。

 //Address drop downs
 ViewData["AddressType"] = new SelectList(ent.tblAddressTypes.ToList(), "AddressID", "AddressType");

        //Contact Drop Downs
        ViewData["ContactTitle"] = new SelectList(ent.tblContactTitles.ToList(), "ContactTitleID", "Title");

        //Event
        ViewData["EventStatus"] = new SelectList(ent.tblEventStatus.ToList(), "EventStatusID", "EventStatus");
        ViewData["EventType"] = new SelectList(ent.tblEventTypes.ToList(), "EventTypeID", "EventType");
        ViewData["Frequency"] = new SelectList(ent.tblFrequencies.ToList(), "FrequencyID", "Frequency");
        ViewData["cLanguage"] = new SelectList(ent.tblLanguages.ToList(), "LanguageID", "Language");
        ViewData["PrimaryAgeGroup"] = new SelectList(ent.tblAgeGroupSet.ToList(), "AgeGroupID", "AgeGroup");
        ViewData["PrimaryEntity"] = new SelectList(ent.tblEntities.ToList(), "EntityID", "Entity");
        ViewData["PrimaryEthnicGroup"] = new SelectList(ent.tblEthnicTargets.ToList(), "EthnicTargetID", "EthnicTarget");
        ViewData["PrimaryLanguage"] = new SelectList(ent.tblLanguages.ToList(), "LanguageID", "Language");
        ViewData["TargetGroup"] = new SelectList(ent.tblTargetGroups.ToList(), "TargetGroupID", "TargetGroup");
        ViewData["TargetFocus"] = new SelectList(ent.tblTargetGroups.ToList(), "TargetGroupID", "TargetGroup");
        ViewData["PrimaryUserGroup"] = new SelectList(ent.tblUserGroups.ToList(), "UserGroupID", "UserGroup");
        ViewData["PrimaryTargetGroup"] = new SelectList(ent.tblTargetGroups.ToList(), "TargetGroupID", "TargetGroup");
        ViewData["OS"] = new SelectList(ent.tblOutreachSpecialists.ToList(), "OSID", "LastName");'

另一个问题是我不知道如何测试这个。我编写了一个存储库方法,只是将下拉列表中的id值映射到相应的EF对象中。

其他人如何处理此问题?我确实在几个地方设置了这些下拉菜单,所以我考虑将它们放在控制器方法中。

思想?

P.S。有点想到这个:http://weblogs.asp.net/scottgu/archive/2007/12/06/asp-net-mvc-framework-part-3-passing-viewdata-from-controllers-to-views.aspx

1 个答案:

答案 0 :(得分:0)

如果您确定坚持使用“纯粹”的做法和架构,那么在MVC中下拉列表会很痛苦。为了我自己的理智,我倾向于倾向于尊敬的Mike Hadlow所描述的以下技术:Populating Drop Down Lists in ASP.NET MVC

这个方法 违反了视图中的数据访问权限......但是我以一种干净的方式实现了这种方式,我觉得它很容易被人们接受,因为它提供了易用性。