2012-01-30 102 views
1

我是新來的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 
        }; 

我相信這將有更好的性能。我非常感謝任何人都可以提供的智慧。謝謝!

回答

0

我已經和你的想法,

沒有ducplicating你的意見,如果他們都在做同樣的事情的點。然而,如果他們沒有做到完全一樣,那麼比擁有一個爲所有部分共享的重要視圖更好地展現或創建新視圖。

你可以有模式,如本

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;} 
} 

後視圖,你可以在它

創建與選擇列表項的每個項目局部視圖