Как это будет сделано в ASP.NET MVC? - PullRequest
2 голосов
/ 22 марта 2009

У меня есть некоторый опыт работы с ASP.NET MVC, но только с веб-приложением, в котором содержимое главной страницы не меняется. Мне было интересно, как вы будете обрабатывать сайт, где, например, меню (которое находится на главной странице) загружается из базы данных. Где бы вы загрузили эти данные?

В WebForms вы должны загрузить меню в коде позади главной страницы или использовать меню в качестве пользовательского элемента управления и выполнить загрузку в коде позади этого. Но где это делается в MVC?

Вы создаете класс, который наследует от Controller, который вы используете для всех своих контроллеров, и позволяете ему загружать меню при каждом вызове Action (я не знаю, возможно ли это, но это кажется вероятным)?

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

Или вы грешите против MVC и просто загружаете его в кодовую страницу главной страницы?

Каков наилучший подход к этому (конечно, не ограничиваясь моими решениями)?

Ответы [ 4 ]

1 голос
/ 23 марта 2009
1 голос
/ 22 марта 2009

ActionFilter s используются для перехвата запроса и выполнения некоторой обработки. Вы можете использовать их.

Является ли это грехом против паттерна MVC?

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

0 голосов
/ 23 марта 2009

Сборка ASP.NET MVC Futures ( подробнее здесь ) содержит метод расширения, который позволяет вам сделать это на главной странице:

<% Html.RenderAction<NavigationController>(c => c.Show()); %>

Вам нужно сослаться на сборку и добавить пространство имен «Microsoft.Web.Mvc» в файл web.config, чтобы это работало.

0 голосов
/ 22 марта 2009

Я бы создал тип модели, с которого главная страница получает свои данные. Затем выведите тип модели страницы из MasterModel.

Контроллер заполняет экземпляр PageModel, и главная страница забирает его.

(В качестве альтернативы модель главной страницы может представлять собой интерфейс, реализованный моделями страниц.)

NB. В CTP MVC для этого требовалось несколько промежуточных классов, чтобы переопределить сопоставление типов для получения данных базового класса. Я не знаю, было ли это исправлено в RTM.

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