1

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

在 ServiceStack razor 视图中完成此操作的最佳方法是什么?谢谢

4

1 回答 1

1

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

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

上面的约定是可覆盖的,您可以通过在装饰的 HttpResult 中返回响应来更改运行时使用的视图和布局模板:

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 视图中设置Layout属性来更改使用的布局,例如:

@inherits ViewPage<Response>
@{
    Layout = IsMobileRequest(base.Request) ? "_LayoutMobile" : "_Layout";
}
于 2013-10-07T03:03:42.417 回答