Предоставление данных для меню на моей главной странице ASP.NET MVC - PullRequest
0 голосов
/ 11 августа 2009

Мы начинаем процесс перехода с веб-форм на MVC для всех наших новых приложений. Я работаю над переносом нашей главной страницы и пытаюсь удовлетворить требования, что нам нужна одна главная страница, которая будет использоваться всеми приложениями. Основная навигация для приложения должна находиться в меню на главной странице. Выполнить это было легко, сложная часть заключается в том, что каждому приложению может потребоваться определить, что отображать в меню, используя уникальный набор правил. Некоторые приложения могут просто сказать: вот структура меню для использования через что-то вроде SiteMap. Другим необходимо определить, что отображается в меню, исходя из того, какие роли выполняет пользователь, это также легко можно сделать с помощью SiteMap. Ситуация, с которой я сталкиваюсь, заключается в том, что некоторым приложениям необходимо создавать меню на основе ролей пользователя, а также данных, над которыми он работает. Т.е. один и тот же пользователь может иметь разные опции в меню для страницы, если он работает с объектом 'foo', чем если он работает с объектом 'bar'.

На этом этапе я создал HtmlHelper, который вызывается представлением главной страницы, получает список объектов пользовательского типа и возвращает неупорядоченный список, стилизованный плагином jQuery, в отобразить меню. Список объектов, которые принимает вспомогательный метод, передается в представление с помощью словаря ViewData. В настоящее время значение этого узла ViewData устанавливается в конструкторе каждого контроллера. Это позволяет каждой странице и, возможно, каждому методу устанавливать свое меню без необходимости устанавливать значение в каждом методе действия, если это не требуется. Я также создал класс, который анализирует SiteMap и возвращает список элементов, необходимых для создания меню. Этот класс - то, что я использую, чтобы установить значение ViewData в контроллере. Идея заключалась в том, что если бы приложению требовалось больше контроля над тем, как генерируются данные меню, они могли бы создать свой собственный класс для генерации данных, пока оно возвращает список объектов правильного типа.

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

Ответы [ 2 ]

1 голос
/ 11 августа 2009

Если это что-то, что будет на каждой странице, сделайте что-то вроде этого:

Создание базового контроллера:

public class MyBaseController : Controller

Пусть этот контроллер получит необходимые данные и отправит эти данные в ViewData ["menu"] в View. Тогда пусть все ваши контроллеры наследуются от этого:

public class HomeController : MyBaseController

На главной странице прокрутите ваши ViewData и создайте ваше меню.

(я сделал что-то подобное для своего подменю, в котором отображался список категорий.)

0 голосов
/ 11 августа 2009

В книге, которую я читаю (Pro ASP.NET MVC Framework от Apress), они используют Html.RenderAction для меню на главной странице. Я новичок в Asp.net MVC, так что, может быть, кто-то еще может дать больше информации об этом.

Вы можете скачать исходный код с сайта apress.com, хотя, возможно, это поможет.

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