MVC中有一个ViewSwitcher,可以添加_Layout、_Layout.mobile;MyView 和可选的 MyView.mobile
在 ServiceStack razor 视图中完成此操作的最佳方法是什么?谢谢
MVC中有一个ViewSwitcher,可以添加_Layout、_Layout.mobile;MyView 和可选的 MyView.mobile
在 ServiceStack razor 视图中完成此操作的最佳方法是什么?谢谢
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";
}