Вопрос

Я пытаюсь изучить новую структуру ASP.NET MVC и хотел бы узнать лучшие практики использования UserControls.

Я понимаю, что вы можете визуализировать UserControl как часть и передавать им данные из контроллера.В идеале я бы подумал, что имеет смысл не иметь кода в файле, поскольку это создает соблазн нарушить правила MVC.

Я приведу пример, в котором я не понимаю, как UserControls вписываются в шаблон.

У меня есть USERCONTROL, который показывает последние теги (как на StackOverflow).В отличие от StackOverflow, я хочу отобразить этот USERCONTROL на всех моих страницах.Если у меня есть контроллер, скажите вопрос о вопросах, который предназначен для обработки действий из некоторых представлений вопросов, например,Просмотр и подробности, означает ли это, что я должен получить данные в вопроснике, а затем передать их в UserControl?

Если я создам еще один контроллер, скажет SearchController, мне придется воспроизвести ту же функциональность, чтобы получить последние теги, чтобы снова перейти к частичным.Разве это не означает, что 2 разных контроллера делают дополнительные вещи, которые они изначально не предназначались?

Это было полезно?

Решение

Если ваш UserControl появляется на каждой странице, то одним из способов решения этой проблемы будет использование базового контроллера, из которого все ваши контроллеры извлекают и генерируют ViewData для UserControl, переопределив метод OnActionExecuting и поместив туда логику.Если ваш UserControl менее распространен, но по-прежнему часто используется на сайте, вы можете расширить ActionFilterAttribute и заставить ваш фильтр генерировать необходимые данные.Этот атрибут можно использовать для украшения контроллеров или действий, генерирующих представления, использующие UserControl.

Во всем этом я предполагаю, что данные для UserControl не зависят от вызываемого действия.Если есть зависимость, вероятно, лучше всего поместить логику в класс (или классы, возможно, с использованием стратегии) ​​и сделать генерацию данных явной в каждом действии или контроллере (путем переопределения OnActionExecuting).

Другие советы

Альтернативно, с помощью ASP.NET MVC 2 теперь вы можете использовать RenderAction для вызова совершенно нового действия контроллера, которое может получать данные.Это делает ваш код более модульным и более понятным, откуда берутся данные.

Вы также можете рассмотреть возможность размещения классов моделей в иерархии.Верхний класс (или один из верхних классов) будет содержать данные, необходимые для ваших повсеместных пользовательских элементов управления.Затем вы можете загрузить эти часто используемые данные в базовый класс контроллера.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top