Я хотел бы иметь 2 отдельных макета в моем приложении. Допустим, один предназначен для публичного раздела сайта, а другой - для членов.
Для простоты, скажем, вся логика для каждого из этих сайтов аккуратно обернута в 2 разных контроллера.
- PublicController
- StaffController
И что каждый из них имеет соответствующий макет для всех видов под каждым.
- _PublicLayout.cshtml
- _StaffLayout.cshtml
Как использовать файл _ViewStart.cshtml, чтобы указать, что все View / Action в «Public» используют PublicLayout, а все в «Staff» - StaffLayout?
Спасибо!
asp.net-mvc
layout
asp.net-mvc-3
razor
Джастин
источник
источник
Razor
вида, просто установитеLayout = null;
Ответы:
Вы можете поместить
_ViewStart.cshtml
в/Views/Public
папку файл, который переопределит файл по умолчанию в/Views
папке и указать желаемую разметку:По аналогии вы можете поместить другой
_ViewStart.cshtml
файл в/Views/Staff
папку с помощью:Вы также можете указать, какой макет следует использовать при возврате представления внутри действия контроллера, но это для каждого действия:
Еще одна возможность - это фильтр пользовательских действий, который переопределяет макет. Как вы можете видеть много возможностей для достижения этой цели. Вам решать, какой из них лучше всего подходит для вашего сценария.
ОБНОВИТЬ:
В соответствии с запросом в разделе комментариев приведен пример фильтра действий, который выбирает главную страницу:
а затем украсьте контроллер или действие с помощью этого пользовательского атрибута, определяющего макет, который вы хотите:
источник
LayoutInjecterAttribute
. ? Есть ли конкретное место?ActionFilters
подпапку.LayoutInjecterAttribute
: она вызывается передOnException
методом контроллера . Таким образом, если контроллер предоставляет результат просмотра во время обработки исключений, макет не будет установлен.OnActionExecuted
. Можете ли вы обновить ответ для меня.Еще один метод - определить макет внутри представления:
Больше способов сделать можно найти здесь , надеюсь, это кому-нибудь поможет.
источник
Этот метод - самый простой способ для начинающих управлять рендерингом макетов в приложении ASP.NET MVC. Мы можем идентифицировать контроллер и визуализировать макеты как контроллер par, для этого мы можем записать наш код в файл _ViewStart в корневом каталоге папки Views. Ниже приведен пример, показывающий, как это можно сделать.
Прочитайте полную статью здесь "Как сделать разные макеты в ASP.NET MVC"
источник