Asp.net система динамического меню MVC

Существует также метрический плагин кода для отражатель , в случае, если Вы используете.NET.

5
задан Eilon 19 January 2010 в 02:26
поделиться

7 ответов

3 варианта:

  1. RenderAction полностью.

  2. RenderPartial, как ответил Райан.

  3. Например, абстрактная модель MasterViewModel. Все ваши модели унаследуют от этого. Заполняется фильтром действий.

3
ответ дан 13 December 2019 в 22:10
поделиться

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

3
ответ дан 13 December 2019 в 22:10
поделиться

Вы можете использовать Render Action из библиотеки MVC Future , если хотите иметь собственный контроллер и т. Д. Для своих меню помимо использования модели главного представления.

3
ответ дан 13 December 2019 в 22:10
поделиться

В основном у вас есть два варианта:

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

  2. Создайте иерархию строго типизированные модели, поместите пункты меню где-нибудь в BaseModel, тогда они будут присутствовать в каждой производной модели.

То, что вас может заинтересовать, - это асинхронные контроллеры или частичные запросы. Это не реализовано в ASP.NET MVC, но вы можете проверить проект сообщества MVC Contrib , он имеет некоторую поддержку.

1
ответ дан 13 December 2019 в 22:10
поделиться

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

У нас были похожие проблемы, когда наша страница / partial имеет четко определенный тип ViewData.Model, но представление содержит часть, которая повторно используется на нескольких страницах. Мы также старались избегать использования ViewDataDictionary.

Однако мы обнаружили, что именно тот случай, который вы описываете, является ТОЧНЫМ сценарием, в котором нам нравится использовать запись ViewDataDictionary. Мы сохраняем статический класс констант в нашей модели приложения, который содержит внутренние классы для каждого типа констант, включая ключи ViewData, чтобы у нас не было строк для этих вещей, плавающих повсюду.

Затем, наше действие Контроллера заполняет ключ ViewData и частичную часть внутри другой страницы / частичные проверки существования этого ключа и использует его вместо ViewData.Model. Он выполняет частичную работу где угодно и сохраняет вашу ViewModel в чистоте. Используя константы, мы избегаем повсюду необработанных строк.

0
ответ дан 13 December 2019 в 22:10
поделиться

Используйте ActionFilter для заполнения ViewData необходимой вам информацией меню. Примените его только к классам и / или методам (возможно, к базовому классу контроллера, если он нужен везде). Создайте несколько методов расширения на контроллере, которые сделают доступ к данным из ViewData строго типизированным (и прозрачным, если вы позже измените место хранения).

Недавно я сделал сообщение в блоге с аналогичным подходом (I нужен список спонсоров для отображения на каждой странице). Это может помочь вам указать правильное направление.

0
ответ дан 13 December 2019 в 22:10
поделиться

Чтобы добавить к этому, RenderAction был добавлен в MVC2 Beta.

0
ответ дан 13 December 2019 в 22:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: