Я работаю над довольно большим приложением MVC 3 и сталкиваюсь с проблемой, которая не совсем мне подходит.Этот вопрос требует некоторой настройки, чтобы понять, поэтому вот условия, над которыми я сейчас работаю:
- Представления должны быть строго типизированы (следует избегать ViewBag / ViewData)
- Поскольку представления строго типизированы, должны быть созданы объекты модели представления, которые инкапсулируют все данные, которые необходимо отобразить для представления
- Когда нам нужно выпадающее меню, у нас должно быть два свойства:
- Свойство в модели, в котором хранится выбранное значение раскрывающегося
- Свойство
SelectList
в модели представления, представляющее элементы раскрывающегося списка
- Само представление всегда использует вспомогательный метод
@Html.DropDownListFor()
- . Мы используем Entity Framework 4 и позволяем ему генерировать классы сущностей из нашей уже спроектированной базы данных
- . Чтобы избежать дублирования и использовать преимущества LINQ,мы не создаем наши собственные отдельные классы бизнес / модели, а добавляем к частичным классам, генерируемым структурой сущностей
- Частичные классы, которые мы пишем, расположены на бизнес-уровне, чтобы все правильно компилировалось
- Большинство классов моделей имеют общий шаблон редактора, который можно использовать в нескольких представлениях
Вот гдепроблема приходит. Тип модели шаблона общего редактора устанавливается на класс модели.Это означает, что частичное представление, составляющее шаблон редактора, не имеет доступа к содержащему объект модели представления, где хранится список раскрывающихся элементов.
Мне удалось «решить» это, добавив SelectList
свойство непосредственно к классу модели на бизнес-уровне вместо сохранения его в модели представления.Но класс SelectList
специфичен для MVC, что, в свою очередь, означает, что мой бизнес-уровень зависит от MVC.Это не кажется мне правильным, потому что BL должен быть агностиком по отношению к пользовательскому интерфейсу.
Кто-нибудь еще сталкивался с этой проблемой?Как мне решить это?Также возможно, что одно из моих предположений неверно.