我需要创建一个表单来插入作者。在该表单中,将有一个用于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?
一般如何处理?任何想法都将不胜感激。
答案 0 :(得分:0)
我建议您使用ViewModel
作为虚拟数据传输对象,排除选项#2。 ViewModel
的作用是传输View
所需的数据。除了映射到您的数据库表的Model
之外,这是很好的。所以Automapper就是这样,因为它简化了ViewModel
的{{1}},反之亦然。 Controller将数据从DB检索到Model
,Model
填充自动填充说明。
直接从View访问数据库的选项#3不是一个好主意。这样的代码很难调试和测试。没有分离关注点。
为此目的使用ViewModel
/ ViewBag
的选项#4并不是一个好选择。剃刀视图引擎中有很多机制依赖于View中的ViewData
。