Asp.net 访问usercontrol中的sitecore子布局属性

Asp.net 访问usercontrol中的sitecore子布局属性,asp.net,sitecore,Asp.net,Sitecore,我有一个包含asp.net向导的子布局。对于每个向导步骤,我希望能够调用asp.net用户控件来显示内容 我创建了一个模板,其中包含一些字段,我希望能够在用户控件中访问这些字段 在我的用户控件中,我尝试通过执行以下操作获得子布局: Sublayout thisSublayout = (Parent as Sublayout); 但这将返回一个空值 知道我做错了什么吗 提前谢谢 下面是我正在使用的代码: MySublayout.ascx 我在这里所做的就是在页面上删除我的用户控件。与此子布局关联

我有一个包含asp.net向导的子布局。对于每个向导步骤,我希望能够调用asp.net用户控件来显示内容

我创建了一个模板,其中包含一些字段,我希望能够在用户控件中访问这些字段

在我的用户控件中,我尝试通过执行以下操作获得子布局:

Sublayout thisSublayout = (Parent as Sublayout);
但这将返回一个空值

知道我做错了什么吗

提前谢谢

下面是我正在使用的代码:

MySublayout.ascx

我在这里所做的就是在页面上删除我的用户控件。与此子布局关联的模板具有“我的模板字段”

scMyTemplateField为空,因此尝试访问scMyTemplateField.Item返回空引用错误

每页顶部的指令如下所示:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="My Sublayout.ascx.cs" Inherits="Sublayouts.content.My_Sublayout" %>
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="MyNestedUC.ascx.cs" Inherits="Controls.MyNestedUC" %>

也许我误解了您的意思,但是如果您引用的是另一个用户控件中的用户控件的子布局,那么您可能需要转换的是“父级”:

Sublayout thisSublayout = (Parent.Parent as Sublayout);

正如@TwentyGotoTen提到的,您可能缺少访问子布局的级别

也就是说,如果字段位于项目上,则不需要访问子布局。您可以直接从用户控件中查询Sitecore.Context.Item

如果字段位于子布局参数模板上,或者位于附加到子布局的组件数据源上,则必须爬升父树以查找作为子布局的父级

或者,这是我的首选方法,在子布局上实例化用户控件时,我会将任何必要的数据传递给公共属性上的用户控件。这允许在任何情况下使用用户控件,只要正确初始化


例如,您可以在名为“DataSource”且类型为“Item”的用户控件上添加公共属性,然后让子布局在初始化时指定属性值。

您可以静态绑定子布局,如下所示-

sc:Sublayout ID=“slfooteutilitynav”Path=“~/Presentation/Sublayouts/Controls/Shared/footeutilitynav.ascx”runat=“server”/>


我想,它会对你有用。

谢谢。我要试试这个。所以我试过了,但不适合我。我要做的是我有一个使用模板的子布局。此模板有一个名为MyTextField的文本字段。子布局所做的一切都是调用一个usercontrol,其中包含指向MyTextField的sc:Text呈现。在usercontrol的pageload中,我设置了scMyTextField.Item=Sitecore.Context.Item的项。我在scMyTextField上得到一个空引用错误。知道为什么吗?在调试器中,什么对象是Sitecore.Context.Item?是的,Sitecore.Context.item正是我要找的。但我不确定为什么我的scText字段返回null。我被难住了。由于my usercontrol是一个基本的asp.net web usercontrol,可能它无法识别sitecore scText?sc:Text正在查找数据源(有时与Context.item是同一项)。如您所知,控件无法检测子布局,因此无法获取数据源。我建议你发布你的代码,这样我们就可以更清楚地看到发生了什么。抓紧救命稻草,但是你是否尝试过用上下文项ID设置
Datasource
属性,而不是使用
item
?是的,我也尝试过这个……同样的问题。出于某种原因,它不知道我的scMyTextField是什么。但我的意思是它是一个字段渲染器控件,在我的.ascx中,所以我不明白为什么它会为null。如果我放置scText控件或另一个asp.net控件,有什么区别。我需要在某个地方初始化它吗?我很困惑:(这是我的designer.cs文件中的内容:protected global::Sitecore.Web.UI.WebControls.Text scMyTextField;检查用户控件顶部的指令,并将其与其他正在工作的控件进行比较。您可能会发现它使用了不正确的属性。我无法让用户控件与我的子布局一起工作,因此我没有任何子布局。)要比较的属性。
scMyTemplateField.Item = Sitecore.Context.Item;
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="My Sublayout.ascx.cs" Inherits="Sublayouts.content.My_Sublayout" %>
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="MyNestedUC.ascx.cs" Inherits="Controls.MyNestedUC" %>
Sublayout thisSublayout = (Parent.Parent as Sublayout);