访问usercontrol中的sitecore子布局属性

时间:2014-04-05 17:01:56

标签: asp.net sitecore


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

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

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

Sublayout thisSublayout = (Parent as Sublayout);

但是这会返回null。

任何想法我做错了什么?

提前致谢。

以下是我使用的代码:

MySublayout.ascx

我在这里做的就是放弃页面上的用户控件。我与此子布局关联的模板有一个"我的模板字段"。

<uctrl:MyNestedUC ID="ucMyUserControl" runat="server" >

</uctrl:MyNestedUC>

MyNestedUC.ascx

此页面上只有一个scText属性:

<sc:Text runat="server" ID="scMyTemplateField" Field="My Template Field" />

MyNestedUC.ascx.cs

在我的页面加载方法中,这就是我正在做的事情:

scMyTemplateField.Item = Sitecore.Context.Item;

scMyTemplateField为null,因此尝试访问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" %>

3 个答案:

答案 0 :(得分:0)

也许我误解了你所说的内容,但是如果你从另一个用户控件中的用户控件引用子布局,那么它可能就是&#34; grand父&#34;你需要施展:

Sublayout thisSublayout = (Parent.Parent as Sublayout);

答案 1 :(得分:0)

正如@TwentyGotoTen所提到的,你可能错过了访问Sublayout的级别。

话虽这么说,如果字段在项目上,您将不需要访问Sublayout。您可以直接从用户控件查询Sitecore.Context.Item。

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

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

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

答案 2 :(得分:0)

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

sc:Sublayout ID =&#34; slFooterUtilityNav&#34;路径=&#34;〜/演示/ Sublayouts /控制/共享/ FooterUtilityNav.ascx&#34; RUNAT =&#34;服务器&#34; /&GT;

我认为,它会对你有用。