在MVC中,有一个ViewSwitcher,你可以添加_Layout,_Layout.mobile; MyView和可选的MyView.mobile
在ServiceStack剃刀视图中实现此目的的最佳方法是什么?感谢
答案 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";
}