2sxc 视图从另一个应用程序的视图渲染时没有应用程序上下文

问题描述 投票:0回答:2

我的网站上有 2 个不同的 2sxc 应用程序 - 我将它们称为 App1 和 App2。 App1 中的内容类型使用“字符串下拉查询”字段从 App2 获取实体的 GUID。

在 App1 视图中,我在查询中使用该 GUID(使用 App.Query)从 App2 检索实体数据。这一切都成功了;我在显示这些数据时没有遇到任何问题。

// App1 View
...
var getPlaylist = App.Query["Get Playlist by GUID"];
getPlaylist.Params("PlaylistId", "16705");
var playlist = AsList(getPlaylist["Default"]).First(); // Returns entity data from App2

<p>@playlist.EntityTitle</p> // App2 data displays correctly

此外,我想在 App1 内渲染 App2 的视图,并传入 App.Query 的实体数据。这几乎可以正常工作。

@RenderPage("/portals/0/2sxc/Artifact-Library/_ResourcesDownload.cshtml", new { Content = playlist })

渲染视图时,实体数据全部正确显示。然而,App2 的附加上下文似乎丢失了;例如单击工具栏按钮时会引发错误(如下所示),并且对 App2 设置或资源的任何引用都会返回空。

Had an error talking to the server (status 400),
Message: Bad Request
Detail: Object reference not set to an instance of an object.

有没有办法可以在 App1 的视图中保留 App2 的上下文?或者至少有一种方法可以让工具栏工作吗?

2sxc dnn9
2个回答
0
投票

我相信你应该使用

IRenderService
- 最好在
Kit.Render
上 - 可能类似于:

@Kit.Render.Module(pageId, moduleId)

0
投票

我的理解是,使用术语 Context 你想传递一些参数。如果这是您的愿望,那么您很幸运,因为我们在 15.07 中添加了一个

data
参数

https://docs.2sxc.org/api/dot-net/ToSic.Sxc.Services.IRenderService.html#ToSic_Sxc_Services_IRenderService_Module_System_Int32_System_Int32_System_String_System_Object_

@Kit.Render.Module(pageId, moduleId, data: new {isGreen = true })

请注意,这些参数就像控制参数,因此您最终会在 child-razor 中编写如下内容:

@inherits Custom.Hybrid.Razor14
@{
  var isGreen = DynamicModel.IsGreen as bool;
}

或者如果您已经输入过

@inherits Custom.Hybrid.Razor14
@{
  var isGreen = MyModel.Bool("IsGreen", fallback: false);
}

请注意,这将在 razor 控件中可用,但不会影响任何侦听 url 参数的内容,例如底层查询。

© www.soinside.com 2019 - 2024. All rights reserved.