Asp.net mvc 使用Helper方法从模型加载DropDownList

Asp.net mvc 使用Helper方法从模型加载DropDownList,asp.net-mvc,asp.net-mvc-3,Asp.net Mvc,Asp.net Mvc 3,我有一堆常用的列表,需要填充下拉列表。我现在做的不是用列表定义ViewModels @Html.DropDownListFor(model => project.TypeID, new SelectList(@PSS.Helpers.ProjectTypes.ProjectTypesList(),"id","name")) 其中,Helper类的定义如下 namespace PSS.Helpers { public class ProjectTypes {

我有一堆常用的列表,需要填充下拉列表。我现在做的不是用列表定义ViewModels

@Html.DropDownListFor(model => project.TypeID, new SelectList(@PSS.Helpers.ProjectTypes.ProjectTypesList(),"id","name"))
其中,Helper类的定义如下

namespace PSS.Helpers
{
    public class ProjectTypes
    {
        public static List<ProjectType> ProjectTypesList()
        {
            MyContext db = new MyContext();
            return db.ProjectTypes.ToList<ProjectType>();

        }
    }
}
名称空间PSS.Helpers
{
公共类项目类型
{
公共静态列表项目类型列表()
{
MyContext db=新的MyContext();
返回db.ProjectTypes.ToList();
}
}
}

这样做有什么不对吗?我是否违反了任何规则?

使用此代码,您很可能会多次访问数据库。因为每次点击这个助手时,您都在创建一个新的实体框架上下文,并点击数据库以获取项目类型列表。对我来说,这很糟糕。

同意佐兰的观点。在此场景中使用ViewModels,因为视图不应该知道您的DAL。它应该是独立的。但是,如果同一个dropdownlist在绑定到不同控制器的不同视图中被访问,那么每次数据库也将被访问。好吧,每个场景都是不同的。是的,在一个MVC web应用程序中,如果您发出两个单独的请求,您将两次点击db。但是,由于编写帮助程序是为了重用代码,因此可能会出现这样一种情况,即在一个请求中或在一个视图中使用该帮助程序两次,并呈现这些下拉列表,在这种情况下,您访问数据库的次数将超过您所希望的次数。实际上,这取决于您的场景,但从长远来看,这种类型的代码可能会导致不必要的bug/性能问题。