MVC Просмотр модели организации - PullRequest
1 голос
/ 31 января 2012

Я новичок в MVC и пытаюсь понять, как организовать мои ModelViews. Первая проблема - выпадающие данные. У меня есть Модель оборудования и Модель EquipmentView, которая выглядит следующим образом:

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

Обратите внимание на список выбора для моей категории. Это все хорошо. Однако у меня есть другая модель, которая называется Inventory. У инвентаря есть свойство EquipmentID (соответствующее части оборудования, которую вы видите). Для создания предмета инвентаря было бы полезно иметь раскрывающийся список для категории оборудования. У меня уже есть этот список выбора в моем EquipmentViewModel, и он чувствует, что некоторые неправильно копируют этот код для InventoryViewModel.

Я рассмотрел что-то вроде этого:

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

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

}

Мне кажется, это нормально, за исключением того, что у меня будет индексная страница для InventoryViewModel. По сути, я бы возвращал список InventoryViewModel, каждый из которых имеет EquipmentViewModel, где в каждом из них есть точно такой же список категорий. Это тоже кажется неправильным, и я думаю, что неправильно понимаю какую-то важную часть головоломки MVC.

Это также подводит меня ко второму вопросу: как бы мне вернуть такое чудовище с контроллера? Я представляю, что это выглядит примерно так:

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

Это означает, что я бы в основном делал отдельные поездки в базу данных (внутри конструктора EquipmentViewModel) для каждого EquipmentID, вместо того, чтобы иметь возможность присоединиться по 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
                   };

Который, на мой взгляд, имел бы гораздо лучшие показатели Я очень ценю любую мудрость, которую может предложить каждый. Спасибо!

1 Ответ

0 голосов
/ 03 февраля 2012

У меня есть идея для вас,

Нет смысла дублировать ваши взгляды, если они делают то же самое.однако, если они не выполняют одно и то же действие, лучше выполнить расширение или создать новое представление, чем иметь одно большое представление, совместно используемое для всех деталей.

У вас может быть такая модель, как эта

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

после просмотра вы можете создать частичное представление для каждого элемента с выбранным элементом списка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...