我对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;
}
}
答案 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之前发生的另一个事件中执行此操作,那么如果您想要更改内容,则必须确保转发器被反弹。一旦你调用数据绑定,它就会绑定。如果您需要更改某些内容,请先进行更改或重新绑定。