为什么PageIoad处理程序中的DataItem始终为null?

时间:2011-08-23 17:56:54

标签: asp.net linq repeater dataitem

我创建了一个带ASP Repeater的ASP.net网页。我将ASP Repeater与IOrderedEnumerable<int> DataSource绑定。

我需要在Page_Load事件处理程序内访问Repeater DataItems。但是,当我尝试获取repeater.Items[x].DataItem的值时,我总是得到null。这里应该总是有一个整数值。

尽管如此,该页面也可以很好地呈现。为什么我不能在Page_Load事件处理程序中访问RepeaterItems的DataItem属性?

4 个答案:

答案 0 :(得分:2)

您的Repeater直到页面生命周期的后期才进行数据绑定。如果您想在Repeater.Items[i].DataItem处理程序中引用Page.Load,请先尝试早期绑定Repeater

repeater.DataBind()

答案 1 :(得分:0)

仅在数据绑定期间可用。

答案 2 :(得分:0)

正如其他人所说,它仅在数据绑定期间可用。您需要连接转发器的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;
    }
}

答案 3 :(得分:0)

数据项仅在数据绑定过程发生后才存在。在转发器中回发中保留的唯一内容是在viewstate中序列化的控件属性。如果您需要这些项目中的数据,您可以更早地执行伪编码和databind,或者如果不可能,您可以编写一个实用程序函数,它接收转发器数据项并从转发器中的控件中提取它(假设您存储了所有数据)以某种方式在这些控件中需要的信息)