MVC:绑定DropDownList的正确方法

时间:2016-03-14 00:54:40

标签: asp.net-mvc

我需要创建一个表单来插入作者。在该表单中,将有一个用于AuthorCategory的DropDownList。 Author和AuthorCategory都是模型类。

我创建了一个ViewModel,仅用于创建作者的相关字段,该作者具有FullName,Email和IEnumerable的公共属性。必须从数据库中提取作者类别,因此我的问题是:

将下拉列表与类别绑定的正确方法是哪种方式;

1:让控制器操作填充数据并将viewmodel传递给视图

2:让ViewModel getter中的相关属性访问db并返回一个列表,如:

   public List<AuthorCategory> Categories
    {
        get
        {
            using (DAL.AdminDbContext db = new DAL.AdminDbContext())
            {
                return new List<AuthorCategory>(db.AuthorCategories.ToList());
            }
        }
    }

3:从View

直接访问数据库

4:ViewBag / ViewData?

5:使用AutoMapper?

一般如何处理?任何想法都将不胜感激。

1 个答案:

答案 0 :(得分:0)

我建议您使用ViewModel作为虚拟数据传输对象,排除选项#2。 ViewModel的作用是传输View所需的数据。除了映射到您的数据库表的Model之外,这是很好的。所以Automapper就是这样,因为它简化了ViewModel的{​​{1}},反之亦然。 Controller将数据从DB检索到ModelModel填充自动填充说明。

直接从View访问数据库的选项#3不是一个好主意。这样的代码很难调试和测试。没有分离关注点。

为此目的使用ViewModel / ViewBag的选项#4并不是一个好选择。剃刀视图引擎中有很多机制依赖于View中的ViewData