asp.net mvc 2 меню между 4 контроллерами

Я хочу иметь 2 меню навигации. Одно будет меню «Верхний уровень» с 4 вариантами выбора, каждый из которых указывает на индекс отдельного контроллера.

Я хотел бы иметь подменю «Уровень контроллера» в левой части экрана. Это будет соответствовать ссылкам, относящимся к контроллеру, выбранному в верхнем меню.

Меню «уровня контроллера» не статично и требует настройки в зависимости от роли пользователя.

Верхний уровень является основным. Но как я могу создать второе меню, которое будет меняться при выборе контроллера сверху?

Данке!


person zz robert    schedule 26.01.2010    source источник


Ответы (2)


Если вы используете MVC 2 RC или MVC Futures, используйте RenderAction.

Создайте контроллер для динамического меню и вызовите RenderAction("action", "controller"). Это вызовет контроллер, и вы можете иметь свою логику в контроллере, чтобы отобразить правильное меню.

person Martin    schedule 26.01.2010
comment
Спасибо! Итак, я бы вызвал RenderAction (displayMenu1, MenuController) из конструктора контроллера 1, RenderAction (displayMenu2, MenuController) из конструктора контроллера 2? Где находится правильное место для вызова RenderAction()? - person zz robert; 26.01.2010
comment
Вы вызываете действие рендеринга там, где вы хотите, чтобы действие было визуализировано (в представлении). - person Mattias Jakobsson; 26.01.2010
comment
ой. тогда это не похоже на то, что это может быть на главной странице. но я бы не хотел вызывать renderaction для левого навигационного меню в каждом отдельном представлении. - person zz robert; 26.01.2010
comment
хм, может быть, я могу поместить имя контроллера в данные представления и отобразить меню как Html.RenderAction(ViewData[CurrentController], MenuController) - person zz robert; 26.01.2010
comment
Это не является хорошей практикой ретрансляции и, вероятно, вызовет некоторые проблемы позже. Если вы не можете подумать о написании одной дополнительной строки кода в своих представлениях, вам следует просто использовать вложенные мастер-страницы. - person Mattias Jakobsson; 26.01.2010
comment
Контроллеры моего сайта будут рендерить по 15-20 просмотров каждый. кажется утомительным и неэффективным помещать RenderAction (соответствующийMenuForThisController, MenuController) в каждое из моих представлений, возможно, до 100x - person zz robert; 26.01.2010
comment
Затем используйте вложенные мастер-страницы. - person Mattias Jakobsson; 26.01.2010
comment
Я ценю вашу помощь в этом. - person zz robert; 26.01.2010
comment
Или поместите заполнитель контента на главную страницу, а затем заполните его соответствующим вызовом RenderAction() в каждом представлении. - person Pawel Krakowiak; 24.02.2010

Я работаю над аналогичной ситуацией, когда мне нужно два меню. Была ли здесь когда-либо решена «лучшая практика»? Мне нужно одно меню слева и динамически создаваемое меню в виде вкладок вверху в зависимости от того, с какой страницей я работаю/на.

Пользователю на самом деле нужна возможность добавлять/удалять/скрывать верхние вкладки в зависимости от предпочтений. Мы используем MVC 2, и я не уверен, принадлежит ли панель вкладок элементу управления, отдельным представлениям или чему-то еще... а также как заставить их взаимодействовать с моими страницами. (Левая навигация должна постоянно показывать, где находится пользователь, а верхняя вкладка должна быть выделена в зависимости от выбранной пользователем подстраницы.

person Newbie    schedule 27.04.2010