Повторитель ASP.NET не привязан после ItemCommand - PullRequest
1 голос
/ 29 октября 2010

У меня есть повторитель, который зацикливает пользовательский элемент управления, например:

                <asp:Repeater ID="repItems" runat="server" EnableViewState="false" 
                OnItemCommand="repItems_ItemCommand">
            <ItemTemplate>
                <dmg:confirmItem runat="server" 
                OnDataBinding="confirmitemItem_DataBinding"  
                Basket="<%# Container.DataItem %>" />
            </ItemTemplate>

            </asp:Repeater>

Мой код выглядит следующим образом:

  public void BindItems(List<ShopBasket> baskets)
    {
        _baskets = baskets;
        repItems.DataSource = baskets;
        repItems.DataBind();
    }

Мой пользовательский элемент управления выглядит следующим образом:

public ShopBasket Basket;
        protected void Page_Load(object sender, EventArgs e)
        {

            imgItem.ImageUrl = ShopImagePath + Basket.ImageFilename;
            ...etc...
        }

В первый раз все работает блестяще, предметы корзины привязаны к объектам Корзины, и все замечательно.

Однако, когда я получаю ItemCommand от моего повторителя и обновляю содержимое корзины (Примечание: здесь не добавляются и не удаляются, просто обновляется количество), я перепривязываю, чтобы увидеть последние значения, и BOOM! Нулевая ссылка - нет объекта Basket в пользовательском элементе управления Page_Load. И это несмотря на то, что вы проследили, что метод BindItems () вызывается как обычно, и корзины есть.

Полагаю, это как-то связано с жизненным циклом, но оно меня побеждает.

Есть идеи?

Спасибо Дункан

1 Ответ

2 голосов
/ 29 октября 2010

Немного опасно иметь публичное поле для хранения привязываемого предмета, особенно если у вас есть несколько предметов.Более безопасный способ сделать это - извлечь Basket как DataItem, связанный с ретранслятором, и сделать что-то с ним таким образом в событии ItemCommand ретранслятора.ItemDataBound будет еще безопаснее, поскольку вы знаете, что корзина будет существовать (поскольку она связана с данными), Page_Load здесь не является безопасным вариантом ...

HTH.

...