servicestack,viewswitcher,Mobile,Razor,View,servicestack,Viewswitcher" /> servicestack,viewswitcher,Mobile,Razor,View,servicestack,Viewswitcher" />

Mobile ServiceStack的视图切换器?

Mobile ServiceStack的视图切换器?,mobile,razor,view,servicestack,viewswitcher,Mobile,Razor,View,servicestack,Viewswitcher,在MVC中,有一个ViewSwitcher,您可以添加_Layout,_Layout.mobile;MyView和可选的MyView.mobile 在ServiceStack razor视图中实现这一点的最佳方法是什么?感谢您,ServiceStack在运行时不会隐式切换布局,而是需要显式设置首选布局。ServiceStack解释了如何动态切换视图,即: 在运行时更改视图和布局模板 上述约定是可重写的,您可以通过在修饰的HttpResult中返回响应来更改运行时使用的视图和布局模板: retur

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


在ServiceStack razor视图中实现这一点的最佳方法是什么?感谢您,ServiceStack在运行时不会隐式切换布局,而是需要显式设置首选布局。ServiceStack解释了如何动态切换视图,即:

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

return new HttpResult(dto) {
    View = {viewName},
    Template = {layoutName},
};
当您希望在专用的移动和打印预览网站模板中显示同一页面时,这非常有用。您还可以通过使用请求过滤器属性为您的服务指定属性,让客户端更改使用的视图和模板:

[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");
    }
}
此属性允许客户端更改与视图和模板查询字符串或FormData请求参数一起使用的视图。此功能的一个实例用于更改/rockstars页面:

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

@inherits ViewPage<Response>
@{
    Layout = IsMobileRequest(base.Request) ? "_LayoutMobile" : "_Layout";
}
@继承ViewPage
@{
Layout=IsMobileRequest(base.Request)?“\u LayoutMobile”:“\u Layout”;
}

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

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

return new HttpResult(dto) {
    View = {viewName},
    Template = {layoutName},
};
当您希望在专用的移动和打印预览网站模板中显示同一页面时,这非常有用。您还可以通过使用请求过滤器属性为您的服务指定属性,让客户端更改使用的视图和模板:

[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");
    }
}
此属性允许客户端更改与视图和模板查询字符串或FormData请求参数一起使用的视图。此功能的一个实例用于更改/rockstars页面:

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

@inherits ViewPage<Response>
@{
    Layout = IsMobileRequest(base.Request) ? "_LayoutMobile" : "_Layout";
}
@继承ViewPage
@{
Layout=IsMobileRequest(base.Request)?“\u LayoutMobile”:“\u Layout”;
}

谢谢您的更新。刚刚开始,到目前为止,我只有3个项目Web、服务和模式相互引用,带有默认的_布局和Hello.cshtml。如何返回新的HttpResult(dto){}?我是否必须对每个请求/响应都这样做?或者它可以在基类上完成?Thanks@Whoever您可以使用或自定义来检查响应数据,并按照
[ClientCanSwapTemplates]
中的操作设置
req.Items[“模板”]
。否则,对于添加类似于基类的功能,您可以使用“谢谢”,这似乎是无限可能的。现在我将回到文档。或者尝试一下javascript方法。说到Filter属性,我确实有一些关于同时访问请求和响应,以及在一次往返中批处理请求等的问题。我将首先进行一些搜索,如果需要,可能会启动一个单独的线程。难以置信的工作!几乎太好了以至于不可能是真的^ ^我让自定义响应过滤器工作起来,真是太棒了!两个后续问题,以防您仍然遵循这一点:Request/ResponseFilterAttribute位于何处?我设置了3个项目,模式、服务和Web(主机/视图)。在模态和服务中,我只添加了ServiceStack.Common。即使ResponseFilterAttribute位于ServiceInterface命名空间中,它仍然不可用。除非我添加整个ServiceStack。有没有办法避免这种情况?在过滤器中(在模式/服务中),有没有办法在设置之前检查aView.mobile.cshtml是否确实存在(希望这样做不会增加太多开销)?尽管我可以通过选择性地添加属性来避免错误,但如果项目超出Hello的范围,则很容易出错。谢谢,谢谢你的更新。刚刚开始,到目前为止,我只有3个项目Web、服务和模式相互引用,带有默认的_布局和Hello.cshtml。如何返回新的HttpResult(dto){}?我是否必须对每个请求/响应都这样做?或者它可以在基类上完成?Thanks@Whoever您可以使用或自定义来检查响应数据,并按照
[ClientCanSwapTemplates]
中的操作设置
req.Items[“模板”]
。否则,对于添加类似于基类的功能,您可以使用“谢谢”,这似乎是无限可能的。现在我将回到文档。或者尝试一下javascript方法。说到Filter属性,我确实有一些关于同时访问请求和响应,以及在一次往返中批处理请求等的问题。我将首先进行一些搜索,如果需要,可能会启动一个单独的线程。难以置信的工作!几乎太好了以至于不可能是真的^ ^我让自定义响应过滤器工作起来,真是太棒了!两个后续问题,以防您仍然遵循这一点:Request/ResponseFilterAttribute位于何处?我设置了3个项目,模式、服务和Web(主机/视图)。在模态和服务中,我只添加了ServiceStack.Common。即使ResponseFilterAttribute位于ServiceInterface namespac中