我是新来的MVC,我想了解如何组织我的ModelViews。第一个问题是下拉数据。我有一个设备模型和EquipmentViewModel,看起来像这样:MVC查看模型组织
public class EquipmentViewModel
{
public Equipment Equipment { get; private set; }
public SelectList EquipmentCategories { get; private set; }
private MyEntities db = new MyEntities();
public EquipmentViewModel(Equipment equipment)
{
Equipment = equipment;
EquipmentCategories = new SelectList(db.EquipmentCategories.Where(c => c.IsActive),
"EquipmentCategoryID", "Description");
}
请注意SelectList为我的类别下拉菜单。这一切都很好。不过,我有另一个模型称为库存。库存具有一个EquipmentID属性(对应于您看到的一件设备)。为了创建库存项目,为设备类别设置一个下拉菜单会很有用。我的EquipmentViewModel中已经有了这个选择列表,并且对于如何为InventoryViewModel复制该代码感觉不对。
我也考虑过这样的事情:
public class InventoryViewModel
{
MyEntities db = new MyEntities();
public Inventory Inventory { get; set; }
public EquipmentViewModel EquipmentViewModel { get; set; }
}
这似乎还好我除了我将不得不为InventoryViewModel索引页。基本上我会返回InventoryViewModels列表,每个列表都有一个EquipmentViewModel,其中每个列表都有完全相同的类别列表。这也是,感觉不对,我认为我误解了一些关键的MVC难题。
这也引出了我的第二个问题:我将如何从控制器返回这样的怪物?我想它看起来像这样的东西:
var list = db.Inventories
.Select(i => new InventoryViewModel
{
Inventory = i,
EquipmentViewModel = new EquipmentViewModel(i.EquipmentID)
});
这意味着,我基本上可以使每个EquipmentID单独前往数据库(EquipmentViewModel构造函数中),而不是能够加盟上的ID。例如,如果我只是需要说明我可以这样做:
var list = from i in db.Inventories
join e in db.Equipments
on i.EquipmentID equals e.EquipmentID
select new InventoryViewModel
{
Inventory = i,
EquipmentName = e.Description
};
我相信这将有更好的性能。我非常感谢任何人都可以提供的智慧。谢谢!