C#为什么OnItemDataBound会在Page_Load之前触发?

时间:2018-06-04 20:58:47

标签: c# asp.net repeater asprepeater

我对c#转发器有疑问。我有默认的宽度设置,它将根据Page_Load中的某些条件进行更改,我希望将更改传递给OnItemDataBound上的我的Image。但是,似乎OnItemDataBound在Page_Load之前触发,因为我在Page_Load中将宽度更改为700,但是当加载图像时,它总是显示380。如果OnItemDataBound不是正确使用的函数,我应该调用哪个函数,以便在调用Page_Load(设置自定义宽度)后可以更改图像宽度?我试过OnPreLoad,OnLoad,但没有一个工作过。

 protected int width = 380;

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        width = 700;
    }
}

protected void Test_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    RepeaterItem item = e.Item;
    if ((item.ItemType == ListItemType.Item) || (item.ItemType == ListItemType.AlternatingItem))
    {
        Image Image = (Image)e.Item.FindControl("Image");

        Image.ImageUrl = Utilities.generateImage();
        Image.Width = width;
    }
}

2 个答案:

答案 0 :(得分:0)

数据绑定在PrerenderComplete事件上完成,该事件在PageLoad之前的页面生命周期中触发。有关详细信息,请查看https://msdn.microsoft.com/en-us/library/ms178472.aspx#lifecycle_events以查看生命周期事件及其顺序。

答案 1 :(得分:0)

如果在标记中声明数据源,它可以更早地渲染所有内容,因为您没有使用手动数据绑定。这可以在Page_Load之前发生。

尝试重载早期事件,例如OnLoad或OnPreLoad。这两个都发生在Page_Load之前。

如果您明确执行数据绑定并在Page_Load之前发生的另一个事件中执行此操作,那么如果您想要更改内容,则必须确保转发器被反弹。一旦你调用数据绑定,它就会绑定。如果您需要更改某些内容,请先进行更改或重新绑定。