2012-01-30 104 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;} 
} 

后视图,你可以在它

创建与选择列表项的每个项目局部视图