You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

跨应用渲染时2sxc视图丢失应用上下文问题

问题描述

站点上有两个独立的2sxc应用:App1和App2。App1的某个内容类型通过String dropdown-query字段获取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(); // 成功获取App2的实体数据

<p>@playlist.EntityTitle</p> // 能正常显示App2的数据

尝试在App1视图中渲染App2的视图,并传入查询到的实体数据时,实体内容能正常显示,但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的上下文,或至少让工具栏正常工作?

解决方案

1. 使用App.View方法加载App2视图

直接用2sxc内置的跨应用视图加载方法,它会自动维护目标应用的上下文,是最推荐的方案:

// 在App1视图中获取App2实例(用应用名称或ID均可)
var app2 = Apps.GetApp("Artifact-Library");
// 渲染App2的目标视图并传入实体数据
@app2.View("_ResourcesDownload", new { Content = playlist })

2. 手动传递App2上下文(兼容RenderPage场景)

如果必须使用RenderPage,需要手动将App2的上下文对象传入视图,让视图能识别所属应用:

var app2 = Apps.GetApp("Artifact-Library");
@RenderPage("/portals/0/2sxc/Artifact-Library/_ResourcesDownload.cshtml", new { 
    Content = playlist,
    App = app2,
    Context = app2.Context
})

注意:需要修改App2的视图代码,确保使用传入的App对象而非全局默认的App实例(如果原视图依赖全局App)。

3. 修正实体的应用关联(修复工具栏核心问题)

工具栏报错的根源是实体的AppId关联的是App1而非App2,手动修正实体的应用ID即可让工具栏请求指向正确的应用:

var app2 = Apps.GetApp("Artifact-Library");
var playlist = AsList(getPlaylist["Default"]).First();
// 绑定实体到App2的上下文
playlist.Entity.AppId = app2.AppId;

之后再渲染视图,工具栏生成的请求会自动关联到App2,避免400错误。

内容的提问来源于stack exchange,提问作者Zachary

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 05:03:34