我有一个关于C#中继器的问题。我有默认的宽度设置,它会改变的基础上的Page_Load的一些条件,我想要的变化是通过我的OnItemDataBound图像。但是,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;
}
}
发布于 2018-06-05 05:07:54
数据绑定是在PageLoad
之前在页面生命周期中触发的PrerenderComplete
事件上完成的。有关更多信息,请查看https://msdn.microsoft.com/en-us/library/ms178472.aspx#lifecycle_events以查看生命周期事件及其顺序。
发布于 2018-06-05 05:20:58
如果您在标记中声明数据源,它可以更早地呈现所有内容,因为您不需要手动绑定数据。这可能发生在Page_Load之前。
尝试重载较早的事件,如OnLoad或OnPreLoad。这两种情况都发生在Page_Load之前。
如果您显式地执行数据绑定,并在Page_Load之前发生的另一个事件中执行此操作,那么如果您想要更改,则必须确保中继器被重新绑定。一旦调用了databind,它就会被绑定。如果您需要更改某些内容,可以在之前进行更改,也可以重新绑定。
发布于 2021-10-04 21:49:39
您可以使用Page_Init来实现这一点。它在ItemDataBound之前触发:
protected void Page_Init(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
// load
}
}
另请参阅:https://docs.microsoft.com/en-us/previous-versions/aspnet/ms178472(v=vs.100)
https://stackoverflow.com/questions/50688686
复制相似问题