查看ServiceStack的Switcher?

时间:2013-10-07 01:45:34

标签: mobile razor view servicestack viewswitcher

在MVC中,有一个ViewSwitcher,你可以添加_Layout,_Layout.mobile; MyView和可选的MyView.mobile

在ServiceStack剃刀视图中实现此目的的最佳方法是什么?感谢

1 个答案:

答案 0 :(得分:1)

ServiceStack不会在运行时隐式切换布局,而是需要显式设置首选布局。 ServiceStack的RazorRockstars Demo website解释了如何动态切换视图,即:

在运行时更改视图和布局模板

上述约定是可重写的,您可以通过在装饰的HttpResult中返回Response来更改运行时使用的View和Layout Template:

return new HttpResult(dto) {
    View = {viewName},
    Template = {layoutName},
};

只要您想在专门的移动和打印预览网站模板中显示相同的页面,这非常有用。您还可以让客户通过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");
    }
}

此属性允许客户端更改View与View和Template QueryString或FormData Request Params一起使用的内容。此功能的实际示例用于更改/ rockstars页面:

更改视图内使用的布局

您甚至可以通过在Razor视图中设置布局属性来更改所使用的布局,例如:

@inherits ViewPage<Response>
@{
    Layout = IsMobileRequest(base.Request) ? "_LayoutMobile" : "_Layout";
}