在C#程序中,Page_Init()事件不可用,请指教。

jpf_java_way 2009-04-26 02:41:50
我在做一个ASP.net的练习,就是比较Page对象的Load()事件与Init()事件的区别。
我是这么做的:
(1)新建一个ASP.NET 2.0网站,切换到设计视图。向缺省页面WebForm1.aspx中添加一个用于布局的HTML表格,在表格中分别填加ListBox1和ListBox2两个控件,再填加一个Button1控件。
(2)将按钮控件Button1的Text属性设置为“引起回发”.
(3)编写后台C#代码,代码如下:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace exam7
{
public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.ListBox ListBox1;
protected System.Web.UI.WebControls.ListBox ListBox2;
protected System.Web.UI.WebControls.Button Button1;
protected static string title; //此变量用来显示网页标题,相应的在html代码中使用了<%=title%>

protected void Page_Init(object sender,EventArgs e)
{
for(int j=0;j<=4;j++)
{
ListBox1.Items.Add(j.ToString());
}
}
protected void Page_Load(object sender,EventArgs e)
{
title="Load事件与Init事件的比较";
for(int i=0;i<=4;i++)
{
ListBox2.Items.Add(i.ToString());
}
}

#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion
//灰色部分为自动生成的。
}
}
如果运行顺利,理论上是:在Page对象的Load事件和Init事件中分别向ListBox1和ListBox2中填充若干数字作为选项。按钮控件无需编写任何代码,只是要在用户单击按钮时引起一个服务器端回发。页面初次加载后,两个列表框中填充的数据完全相同,但单击按钮或刷新页面引起回发后在Page_Load事件中填充的ListBox2控件的选项将出现重复。
可是我运行后,在Page_Init事件中填充的ListBox1控件根本没有填充内容。然后我将 title="Load事件与Init事件的比较"; 这一句换到Page_Init事件里去,发现,网页标题就不会变成“Load事件与Init事件的比较”了,然后,我判断,在C#程序中,Page_Init事件代码没有执行。

请高手指点迷津,谢谢!
...全文
632 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
兔儿爷 2009-04-26
  • 打赏
  • 举报
回复
来晚了,学习

欢迎访问我的博客 程序员日记 http://www.ideaext.com
T13yiyong 2009-04-26
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 jpf_java_way 的回复:]
Page_Init:是在页面未加载之前,也就是在页面初始化之前,在Page_Load之前调用的,可以在控件加载之前做一些客户端检测呀这些操作等。但这个事件对于当前用户来说,只会进行一次,也就是第一次访问这个页面的时候,其运行一次。
Page_Load:在Page_Init之后运行,用于加载控制以及页面的其它内容。
当Init激发时,控件都已经可用,但控件未通过ViewState对象初始化。
在所有控件都通过ViewState…
[/Quote]
Page_Init()在Page_Load()前面执行
jpf_java_way 2009-04-26
  • 打赏
  • 举报
回复
结帖了,再次谢谢
jpf_java_way 2009-04-26
  • 打赏
  • 举报
回复
谢谢大家,我明白了。
jpf_java_way 2009-04-26
  • 打赏
  • 举报
回复
现在我只有一个问题了:
是不是说,如果在Init事件中对页面内容做任何修改,都没用?都将会被Load事件打回原形?
yangqidong 2009-04-26
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 jpf_java_way 的回复:]
引用 12 楼 yangqidong 的回复:

回发前的数据就是 你点提交按钮之前的数据

那我说一下我理解的意思,你看对不对。
我上面那段程式中,Init事件只前ListBox1内容是空的。然后,Init事件之后有值了。
然后再执行Load事件,是不是Load事件就将ListBox1的内容自动恢复到Init事件执行只前的值了?
[/Quote]
right
dengyun_1223 2009-04-26
  • 打赏
  • 举报
回复
学习
jpf_java_way 2009-04-26
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 wuyq11 的回复:]
Page_Init:是在页面未加载之前,也就是在页面初始化之前,在Page_Load之前调用的,可以在控件加载之前做一些客户端检测呀这些操作等。但这个事件对于当前用户来说,只会进行一次,也就是第一次访问这个页面的时候,其运行一次。
Page_Load:在Page_Init之后运行,用于加载控制以及页面的其它内容。
当Init激发时,控件都已经可用,但控件未通过ViewState对象初始化。
在所有控件都通过ViewState对象初始化之后,激发Load
[/Quote]
那就是说,如果在Init事件中对页面内容做任何修改,都没用?都将会被Load事件打回原形?
jpf_java_way 2009-04-26
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 yangqidong 的回复:]
回发前的数据就是 你点提交按钮之前的数据
[/Quote]
那我说一下我理解的意思,你看对不对。
我上面那段程式中,Init事件只前ListBox1内容是空的。然后,Init事件之后有值了。
然后再执行Load事件,是不是Load事件就将ListBox1的内容自动恢复到Init事件执行只前的值了?
wuyq11 2009-04-26
  • 打赏
  • 举报
回复
Page_Init:是在页面未加载之前,也就是在页面初始化之前,在Page_Load之前调用的,可以在控件加载之前做一些客户端检测呀这些操作等。但这个事件对于当前用户来说,只会进行一次,也就是第一次访问这个页面的时候,其运行一次。
Page_Load:在Page_Init之后运行,用于加载控制以及页面的其它内容。
当Init激发时,控件都已经可用,但控件未通过ViewState对象初始化。
在所有控件都通过ViewState对象初始化之后,激发Load
jpf_java_way 2009-04-26
  • 打赏
  • 举报
回复
东东呛,你千万不要急啊,你一定要让我明白呀,我还是没明白过来的。
那你能不能给我个方法,在一个页面上比较Init 和Load事件的区别?
yangqidong 2009-04-26
  • 打赏
  • 举报
回复
回发前的数据就是 你点提交按钮之前的数据
gongsun 2009-04-26
  • 打赏
  • 举报
回复
呵呵,楼主把 “东东呛” 弄急死了...
yangqidong 2009-04-26
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 jpf_java_way 的回复:]
请大家看清我的问题,1楼和3楼说的都对,就是没看清我的问题,请看清再答,我的程序里Page_Load()和Page_Init()事件是控制不同的控件内容的。
[/Quote]
呵呵。。。
jpf_java_way 2009-04-26
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 yangqidong 的回复:]
引用 4 楼 jpf_java_way 的回复:
引用 1 楼 yangqidong 的回复:

PageInit先于PageLoad
PageLoad会把控件的值设置为回发前的值,所以PageInit里面对控件的值做修改是没用的

你的意思我明白,但是,你没看懂我的意思,我这个是Init事件和Load事件分别控制不同的控件的值。


我想,应该是你没明白我的意思。

没错,你在PageInit操作ListBox1,
但是,到了页面加载阶段 ListBox1 会 自动(注意 是 自动)恢复成…
[/Quote]
如果是到回发前的数据,那也应该是:0,1,2,3,4。
gongsun 2009-04-26
  • 打赏
  • 举报
回复
你那个样子 ListBox1先被赋值,后又重至为空。

pageload 中加


if (!Page.IsPostBack)
{

}


yangqidong 2009-04-26
  • 打赏
  • 举报
回复
msdn里面页面生命周期,仔细理解一下加载阶段
页初始化
页初始化期间,可以使用页中的控件,并将设置每个控件的 UniqueID 属性。此外,任何主题都将应用于页。如果当前请求是回发请求,则回发数据尚未加载,并且控件属性值尚未还原为视图状态中的值。
加载
加载期间,如果当前请求是回发请求,则将使用从视图状态和控件状态恢复的信息加载控件属性。



jpf_java_way 2009-04-26
  • 打赏
  • 举报
回复
请大家看清我的问题,1楼和3楼说的都对,就是没看清我的问题,请看清再答,我的程序里Page_Load()和Page_Init()事件是控制不同的控件内容的。
yangqidong 2009-04-26
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jpf_java_way 的回复:]
引用 1 楼 yangqidong 的回复:

PageInit先于PageLoad
PageLoad会把控件的值设置为回发前的值,所以PageInit里面对控件的值做修改是没用的

你的意思我明白,但是,你没看懂我的意思,我这个是Init事件和Load事件分别控制不同的控件的值。
[/Quote]

我想,应该是你没明白我的意思。

没错,你在PageInit操作ListBox1,
但是,到了页面加载阶段 ListBox1 会 自动(注意 是 自动)恢复成 回发前的数据!
jpf_java_way 2009-04-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 yangqidong 的回复:]
PageInit先于PageLoad
PageLoad会把控件的值设置为回发前的值,所以PageInit里面对控件的值做修改是没用的
[/Quote]
你的意思我明白,但是,你没看懂我的意思,我这个是Init事件和Load事件分别控制不同的控件的值。
加载更多回复(3)

62,267

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧