无法使用servicestack剃刀从Layout页面访问模型/请求数据(_L)



我有一个共享的_Layout.cshtml页面,我需要在其中访问调用该页面的服务,或者访问请求dto或Model,以便根据调用服务的类型、模型类型或请求类型呈现不同的选项。在Layout页面中,我似乎无法访问以上任何内容。我对SS Razor还很陌生,可能只是没有看到更大的前景,但以下是我迄今为止所做的尝试和访问该模型的工作。

在_Layout.cshtml中,我定义了以下内容,因此我可以访问ViewBag和Session信息。

@using ServiceStack.Razor
@inherits ViewPage<ResponseBase>

我只尝试了一个普通视图页面也

@inherits ViewPage

这使我可以访问Layout中的基本页面基础结构。但是布局中的Model始终为null,尽管我临时将所有响应更改为从ResponseBase类继承,并且从上面的代码中可以看出,我继承了所有Model至少都有ResponseBase的页面。

然后,我设置了一个全局过滤器,在那里我将请求DTO注入到请求项中,因为这将是一个开始,并将证明我可以在布局中访问一些信息。所以我在应用程序主机中添加了以下内容

this.RequestFilters.Add((httpReq, httpResp, requestDto) =>
{
if(httpReq != null && httpReq.Items != null)
httpReq.Items["RequestDto"] = requestDto;
}); 

我可以看到过滤器上有一个断点,并且可以看到reqestD被添加到集合中,所以我知道这篇文章至少在工作。当我尝试使用Request.Items下面的代码访问_Layout中的requestDto时,它从不包含requestDto。

@{
RequestBase myRequest = null;
if(base.Request != null)
if(base.Request.Items.ContainsKey("RequestDto"))
myRequest = (RequestBase)base.Request.Items["RequestDto"];
}

所有这些都有点试错,因为在我的生活中,我无法在Razor View页面中设置断点,这样我就可以看到里面实际发生了什么。在这个阶段,我已经浏览了无数次RazorRockStars的样本,看不到任何我想在那里做什么的例子。

关于如何解决这个问题,任何人都有任何建议、例子或建议。请随意指出一种完全不同的方法来渲染_Layout中的不同选项,因为在这个阶段,我已经没有多少头发了,我愿意尝试任何东西。

试用ServiceStack的v3.9.33。mythz修复了剃刀支持中可能与此问题有关的一些内容。

最新更新