Почему DataItem всегда нулевой в обработчике Page_Load? - PullRequest
0 голосов
/ 23 августа 2011

Я создал веб-страницу ASP.net с ретранслятором ASP.Я связываю повторитель ASP с IOrderedEnumerable<int> источником данных.

Мне нужно получить доступ к элементам данных повторителя внутри обработчика события Page_Load.Однако, когда я пытаюсь получить значение repeater.Items[x].DataItem, я всегда получаю ноль.Здесь всегда должно быть целочисленное значение.

Несмотря на это, в противном случае страница отображается нормально.Почему я не могу получить доступ к свойству DataItem моих RepeaterItems внутри обработчика события Page_Load?

Ответы [ 4 ]

2 голосов
/ 23 августа 2011

Ваш Repeater не связывается с данными до тех пор, пока не появится жизненный цикл страницы. Если вы хотите сослаться на Repeater.Items[i].DataItem в обработчике Page.Load, попробуйте раннее связывание Repeater сначала:

repeater.DataBind()
0 голосов
/ 23 августа 2011

Элементы данных существуют только после того, как произошла привязка данных.Единственное, что сохраняется во всех обратных передачах в повторителе, это свойства управления, которые сериализуются в viewstate.Если вам нужны данные в этих элементах, вы можете сделать так, как сказал псевдокодер и привязать данные ранее, или, если это невозможно, вы можете написать служебную функцию, которая берет элемент данных повторителя и извлекает его из элементов управления вашего повторителя (при условии, что вы сохранили всеинформация, которая вам нужна в этих элементах управления как-то)

0 голосов
/ 23 августа 2011

Как и все остальные, он доступен только во время привязки данных. Вам нужно будет подключить событие OnItemDataBound повторителя. В обработчике событий вы можете сделать это:

protected void Repeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    switch (e.Item.ItemType)
    {
        case ListItemType.Item:
        case ListItemType.AlternatingItem:
            WhateverType Item = e.Item.DataItem as WhateverType;
            break;
    }
}
0 голосов
/ 23 августа 2011

Доступно только при привязке данных.

...