我是MVC的新手,我试图了解如何组织我的ModelViews。第一个问题是Drop Down数据。我有一个设备模型和一个看起来像这样的EquipmentViewModel:
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的索引页面。基本上我会返回一个InventoryViewModel列表,每个ListViewModel都有一个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
};
我认为这会有更好的表现。我非常感谢任何人都可以提供的任何智慧。谢谢!
答案 0 :(得分:0)
我有你的想法,
如果他们在做同样的事情,那么你的观点是没有意义的。然而,如果它们没有完全相同,那么放弃或创建新视图比拥有一个为所有部分共享的大视图更好。
你可以拥有这样的模型
public class InventoryViewModel{
// contains all categories for every inventory
public SelectListItem EquipmentSelect {get;set;}
//this will contain all the items you want to assign
public List<Inventories> ListOfInventories{get;set;}
}
在视图中,您可以为其中的选择列表项创建每个项目的部分视图