我是新來的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
};
我相信這將有更好的性能。我非常感謝任何人都可以提供的智慧。謝謝!