Mobile ServiceStack的视图切换器?
在MVC中,有一个ViewSwitcher,您可以添加_Layout,_Layout.mobile;MyView和可选的MyView.mobileMobile 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
在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页面:
@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页面:
@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中