Метод, который я собираюсь описать, возможно, взломан и может противоречить некоторым намерениям создателей Орчард, но он выполнит свою работу.
Orchard использует ThemeFilter
с атрибутом Themed
, чтобы решить, будет ли текущий выход действия контроллера «тематическим» --- т.е. отображаться с верхними и нижними колонтитулами. Контроллер, используемый Orchard для отображения элементов контента, включил этот атрибут, поэтому элементы контента отображаются тематически. То, что вы просите сделать, это подавить этот «тематический» режим на основе наличия параметра строки запроса.
ThemeFilter
запускается на ранней стадии запроса страницы и применяет себя, устанавливая значение в контексте http-запроса текущего запроса.
ThemeFilter.cs:
public static void Apply(RequestContext context) {
// the value isn't important
context.HttpContext.Items[typeof (ThemeFilter)] = null;
}
Этот класс не предоставляет способ ипа Apply
ИНГ этого значения. Если вы готовы изменить исходный Orchard код, вы можете добавить этот метод себя:
public static void Unapply(RequestContext context) {
context.HttpContext.Items.Remove(typeof (ThemeFilter));
}
Тогда вы можете просто создать свой собственный фильтр действия, который проверяет наличие строки запроса, а затем вызывать этот метод при необходимости , что-то вроде:
using System.Web.Mvc;
using Orchard.Mvc.Filters;
using Orchard.Themes;
namespace Demo {
public class UnthemeFilter : FilterProvider, IActionFilter {
public void OnActionExecuting(ActionExecutingContext filterContext) {
}
public void OnActionExecuted(ActionExecutedContext filterContext) {
if (filterContext.RequestContext.HttpContext.Request["unthemed"] != null) {
ThemeFilter.Unapply(filterContext.RequestContext);
}
}
}
}
Теперь, добавив ?unthemed=true
, вы будете в состоянии подавить тематизации.
Если вы не хотите или не можете изменить исходный код Orchard, все равно можно сделать то же самое, удалив непосредственно из контекста HTTP в вашем фильтре typeof (ThemeFilter)
. Однако это нарушает инкапсуляцию и, вероятно, следует избегать в объектно-ориентированном программировании.
Вы говорите о странице Orchard, составленной с использованием элементов контента Orchards? Или ваша собственная простая страница MVC? – Hazza
Страница, построенная с содержимым садов. – Martin
Вам нужно будет создать свой собственный контроллер. –