中继器项数据都使用数据的源项数据

本文关键字:数据 中继器 | 更新日期: 2023-09-27 18:21:29

好的,所以我有一个中继器:

<asp:Repeater ID="myRepeater"  OnItemDataBound="myRepeater_ItemDataBound" runat="server">
    <HeaderTemplate>
    </HeaderTemplate>
    <ItemTemplate>
    <sc:sublayout ID="scSublayout" Path="/Components/Spot/BlurbSpot.ascx" runat="server" />
    </ItemTemplate>
</asp:Repeater>

数据绑定如下:

myRepeater.DataSource = Sitecore.Context.Item.GetChildren();
myRepeater.DataBind();

我的项目数据绑定获取数据源并将其应用于sc:sublyout:

protected void myRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        var scSublayout = e.Item.FindControl("scSublayout") as Sitecore.Web.UI.WebControls.Sublayout;
         if (scSublayout != null)
         {
             scSublayout.DataSource = ((Sitecore.Data.Items.Item)e.Item.DataItem).ID.ToString();
         }
    }
} 

它显示两个项目,但这两个项目都显示来自第二个数据源的数据。调试过程中,我可以看到两者都找到了,但由于某种原因,第一个循环的原始值被重写了。

我想要的是显示这两个项目,并且第一个循环的项目不需要重写其变量。

@Mark Ursino

public partial class BlurbSpotSublayout : Logic.BaseSublayout
{
    public static string Blurb_Spot_Heading;
    public static string Blurb_Spot_SubHeading;
    public static string Blurb_Spot_Abstract;
    private void Page_Load(object sender, EventArgs e) 
    {
        if (DataSource != null)
        {
            Blurb_Spot_Heading = BlurbSpot.GetInstance(DataSource.Paths.FullPath.ToString()).Heading;
            Blurb_Spot_SubHeading = BlurbSpot.GetInstance(DataSource.Paths.FullPath.ToString()).SubHeading;
            Blurb_Spot_Abstract = BlurbSpot.GetInstance(DataSource.Paths.FullPath.ToString()).BlurbAbstract;
        }
    } 

前端是:

<div ID="Div3" runat="server"><%=Blurb_Spot_SubHeading%></div>
<div ID="Div1" runat="server"><%=Blurb_Spot_Heading %></div>
<div ID="Div2" runat="server"><%=Blurb_Spot_Abstract%></div>

然后我通过以下操作将项目传递给后面的一个班:

Database webDB = Sitecore.Configuration.Factory.GetDatabase("web");
Sitecore.Data.Items.Item item;
this.item = webDB.Items[item];

GetInstance()。标题执行此操作:

public string Heading
    {
        get
        {
            if (item != null)
            {
                    Sitecore.Data.Fields.Field field = item.Fields["BlurbSpot_Content_Header"];
                    if (field != null)
                    {
                        return field.Value;
                    }
                    else
                    {
                        return _heading; // returns default pixel width if BlurbSpot_Heading is not define, or is null
                    }
            }
            return _heading;
        }
        set
        {
            _heading = value;
        }
    }

中继器项数据都使用数据的源项数据

问题是您的字符串被静态声明为:

public static string Blurb_Spot_Heading;
public static string Blurb_Spot_SubHeading;
public static string Blurb_Spot_Abstract;

因为它们是静态的,所以它们在用户控件的所有实例中共享。声明为:

public string Blurb_Spot_Heading;
public string Blurb_Spot_SubHeading;
public string Blurb_Spot_Abstract;

试试看。