Я новичок в 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
};
Который, на мой взгляд, имел бы гораздо лучшие показатели Я очень ценю любую мудрость, которую может предложить каждый. Спасибо!