今天做东西遇见一个问题,为了节省开销,需要获取一个用户控件的属性值显示在页面上
但是ascx的赋值是在 Page_Load(object sender, EventArgs e)中进行的,
test.ascx.cs:
public int PageSize
{
get;
set;
}
public void Page_Load(object sender, EventArgs e)
{
PageSize = 10;
}
test.aspx:
<uc1:Test ID="ascxTest" runat="server" />
<asp:Literal ID="pageLtr" runat="server"></asp:Literal>
test.aspx.cs:
protected void Page_Load(object sender, EventArgs e)
{
pageLtr.Text = "最后输出:"+ ascxTest.PageSize.ToString();
}
结果:
最后输出:0
原因:用户控件的page_load事件在页面的page_load事件之后
从网上找了找,解决方法修改test.ascx.cs将其Page_Load方法改为public
修改test.aspx.cs为:
protected void Page_Load(object sender, EventArgs e)
{
ascxTest.Page_Load(null, null);
pageLtr.Text = "最后输出:"+ ascxTest.PageSize.ToString();
}
结果:
最后输出:10
问题解决了吗?
调试了下,发现ascx的pageload事件执行了两次,我们的本意是为了节省开销,这样的话不是没有任何意义吗?
最后修改test.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
;
;
}
protected void Page_PreRender(object sender, EventArgs e)
{
pageLtr.Text = "最后输出:" + ascxTest.PageSize.ToString();
}
解决问题
看来页面的生命周期真的很重要,啥时候有空了记录一下