2012-01-30 5 views
1

MVC를 처음 접했고 ModelView를 구성하는 방법을 이해하려고합니다. 첫 번째 문제는 드롭 다운 데이터입니다. 장비 모델과 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 드롭 다운에 유의하십시오. 이것은 모두 좋고 좋은 것입니다. 그러나 나는 재고라는 다른 모델을 가지고있다. 인벤토리에는 장비 ID 속성 (사용자가 보는 장비에 해당)이 있습니다. 인벤토리 아이템을 만들려면 장비 카테고리를 드롭 다운하는 것이 유용 할 것입니다. 내 EquipmentViewModel에 이미이 선택 목록이 있으며 InventoryViewModel 코드를 복제하는 방법이 잘못되었습니다. 나는 InventoryViewModel에 대한 색인 페이지를해야 할 것입니다 제외

public class InventoryViewModel 
{ 
    MyEntities db = new MyEntities(); 

    public Inventory Inventory { get; set; } 
    public EquipmentViewModel EquipmentViewModel { get; set; } 

} 

이 나에게 좋아 보인다

가 나는 같은 것을 생각했다. 기본적으로 나는 각각에 EquipmentViewModel이있는 InventoryViewModels List를 반환 할 것입니다. 각각의 EquipmentViewModel에는 정확히 동일한 카테고리 목록이 있습니다. 이것 역시 잘못되었다고 생각합니다. MVC 퍼즐의 중요한 부분을 오해하고 있습니다.

또한 내 두 번째 질문으로 이어집니다 : 컨트롤러에서 그런 괴물을 어떻게 돌려 놓을 수 있습니까? 나는 이런 식으로 뭔가를 찾고 상상 : 나는 기본적으로 오히려 ID를 가입 할 수있는 것보다 각 EquipmentID에 대한합니다 (EquipmentViewModel 생성자 내부) 데이터베이스에 별도의 여행을 만드는 것을 의미

var list = db.Inventories 
      .Select(i => new InventoryViewModel 
      { 
       Inventory = i, 
       EquipmentViewModel = new EquipmentViewModel(i.EquipmentID) 
      }); 

. 예를 들어 방금 설명이 필요한 경우 다음을 수행 할 수 있습니다.

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

로 모델을 가질 수