Посмотреть Switcher для ServiceStack?
В MVC есть ViewSwitcher, и вы можете добавить _Layout, _Layout.mobile; MyView и дополнительный MyView.mobile
Каков наилучший способ сделать это в представлении бритвы ServiceStack? Спасибо
1 ответ
ServiceStack неявно переключает макеты во время выполнения, вместо этого необходимо явно установить предпочтительный макет. Демо-сайт RazorRockstars от ServiceStack объясняет, как динамически переключать представления, а именно:
Изменение видов и шаблонов макетов во время выполнения
Вышеупомянутое соглашение может быть переопределено, когда вы можете изменить как View, так и Layout Template, используемые во время выполнения, возвращая ваш Response внутри декорированного HttpResult:
return new HttpResult(dto) {
View = {viewName},
Template = {layoutName},
};
Это полезно, когда вы хотите отобразить одну и ту же страницу в специализированных шаблонах веб-сайтов Mobile и Print Preview. Вы также можете позволить клиенту изменить используемые View и Template, приписав вашу службу атрибуту фильтра запроса ClientCanSwapTemplates:
[ClientCanSwapTemplates]
public class RockstarsService : RestServiceBase { ... }
Сама по себе очень простая реализация, которая также показывает, что вы можете поменять представление или шаблон, используемые внутри фильтра запросов:
public class ClientCanSwapTemplatesAttribute : RequestFilterAttribute
{
public override void Execute(IHttpRequest req, IHttpResponse res, object requestDto)
{
req.Items["View"] = req.GetParam("View");
req.Items["Template"] = req.GetParam("Template");
}
}
Этот атрибут позволяет клиенту изменять, какое представление используется с параметрами запроса и шаблона QueryString или FormData. Пример использования этой функции в реальном времени используется для изменения страницы / rockstars:
- / Rockstars? Посмотреть = AngularJS
- / Rockstars? Шаблон = SimpleLayout
- http://razor.servicestack.net/rockstars?View=AngularJS&Template=SimpleLayout
Изменение макета, используемого из вида
Вы даже можете изменить используемый макет, установив свойство Layout из Razor View, например:
@inherits ViewPage<Response>
@{
Layout = IsMobileRequest(base.Request) ? "_LayoutMobile" : "_Layout";
}