【问题标题】:Cannot access model/request data with servicestack razor from a _Layout page无法从 _Layout 页面使用 servicestack razor 访问模型/请求数据
【发布时间】:2012-12-05 09:58:28
【问题描述】:

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

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

@using ServiceStack.Razor
@inherits ViewPage<ResponseBase>

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

@inherits ViewPage

这使我可以访问 _Layout 中的基本页面基础结构。 但是布局中的模型始终为空,即使我暂时将所有响应更改为从 ResponseBase 类继承,并且从上面的代码中可以看出,我继承了该页面,其中所有模型至少都有一个 ResponseBase。

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

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

我可以看到在过滤器上命中了一个断点,并且可以看到 reqestDto 已添加到集合中,因此我知道这部分至少可以正常工作。 当我尝试使用 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 视图页面中设置断点,因此我可以看到那里实际发生了什么。 在这个阶段,我已经通过 RazorRockStars 采样了无数次,但看不到任何我正在尝试做的示例。

那么有没有人对如何解决这个问题有任何指示、示例或建议。随意指出一种完全不同的方法来在 _Layout 中呈现不同的选项,因为在这个阶段我没有太多的头发,并且愿意尝试任何事情。

【问题讨论】:

  • 您是自行托管、托管在 IIS 中还是在经典 ASP MVC 项目中使用 ServiceStack(两者混合)。
  • 不,我不是自托管,我是在虚拟主机中。
  • 这里有同样的问题。我收到了Cannot implicitly convert type 'ServiceStack.Razor.Compilation.RazorDynamicObject' to 'XYZ.IMyModel' 异常。

标签: c#-4.0 razor servicestack


【解决方案1】:

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

【讨论】:

  • 即使使用最新的 NuGet,我也遇到了类似的问题。还有其他想法吗?
猜你喜欢
  • 2021-02-04
  • 2022-01-10
  • 2012-05-19
  • 2020-05-26
  • 2019-05-07
  • 2020-05-01
  • 2012-10-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多