Все данные элементов репитера используют данные элементов источника для данных - PullRequest
1 голос
/ 24 января 2012

Хорошо, у меня есть повторитель:

<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: sublayout:

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();
         }
    }
} 

Отображаются два элемента, но оба элемента отображают данные из второго источника данных. Отладка Я вижу, что он находит оба, но по какой-то причине исходные значения для 1-го цикла перезаписываются.

Я хочу, чтобы отображались как элементы, так и первый элемент, который зацикливается, чтобы его переменные не перезаписывались.

@ Марк Урсино

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;
        }
    }

1 Ответ

2 голосов
/ 24 января 2012

Проблема состоит в том, что ваши строки объявлены статически как:

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;

Дайте ему шанс.

...