标题:
关于窗体页事件顺序测试的问题
[打印本页]
作者:
bool_sir
时间:
2011-9-6 21:04
标题:
关于窗体页事件顺序测试的问题
------------------------测试窗体页事件顺序,代码如下-------------------------
protected void Page_PreInit(object sender,EventArgs e)
{
string s = DateTime.Now.ToLongTimeString();
s += "事件名称为Page_PreInit";
Response.Write(s);
Response.Write("<br />");
System.Threading.Thread.Sleep(1000);
}
/// <summary>
/// 窗体页初始化
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Page_Init(object sender,EventArgs e)
{
string s = DateTime.Now.ToLongTimeString();
s += "事件名称为Page_Init";
Response.Write(s);
Response.Write("<br />");
System.Threading.Thread.Sleep(1000);
}
/// <summary>
/// 窗体页初始化完成
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Page_InitComplete(object sender, EventArgs e)
{
string s = DateTime.Now.ToLongTimeString();
s += "事件名称为Page_InitComplete";
Response.Write(s);
Response.Write("<br />");
System.Threading.Thread.Sleep(1000);
}
/// <summary>
/// 窗体页预加载
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Page_PreLoad(object sender, EventArgs e)
{
string s = DateTime.Now.ToLongTimeString();
s += "事件名称为Page_PreLoad";
Response.Write(s);
Response.Write("<br />");
System.Threading.Thread.Sleep(1000);
}
/// <summary>
/// 窗体页加载
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Page_Load(object sender, EventArgs e)
{
string s = DateTime.Now.ToLongTimeString();
s += "事件名称为Page_Load";
Response.Write(s);
Response.Write("<br />");
System.Threading.Thread.Sleep(1000);
}
/// <summary>
/// 窗体页加载完成
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Page_LoadComplete(object sender, EventArgs e)
{
string s = DateTime.Now.ToLongTimeString();
s += "事件名称为Page_LoadComplete";
Response.Write(s);
Response.Write("<br />");
System.Threading.Thread.Sleep(1000);
}
/// <summary>
/// 窗体页渲染前
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Page_PreRender(object sender, EventArgs e)
{
string s = DateTime.Now.ToLongTimeString();
s += "事件名称为Page_PreRender";
Response.Write(s);
Response.Write("<br />");
System.Threading.Thread.Sleep(1000);
}
/// <summary>
///窗体页保存视图状态
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Page_SaveStateComplete(object sender, EventArgs e)
{
string s = DateTime.Now.ToLongTimeString();
s += "事件名称为Page_SaveStateComplete";
Response.Write(s);
Response.Write("<br />");
System.Threading.Thread.Sleep(1000);
}
/// <summary>
/// 窗体页渲染
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Page_Render(object sender, EventArgs e)
{
string s = DateTime.Now.ToLongTimeString();
s += "事件名称为Page_Render";
Response.Write(s);
Response.Write("<br />");
System.Threading.Thread.Sleep(1000);
}
/// <summary>
/// 窗体页卸载
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Page_Unload(object sender, EventArgs e)
{
string s = DateTime.Now.ToLongTimeString();
s += "事件名称为Page_Unload";
ApplicationInstance.Response.Write(s);
ApplicationInstance.Response.Write("<br />");
System.Threading.Thread.Sleep(1000);
}
------------------------输出结果如下-------------------------
20:56:29事件名称为Page_PreInit
20:56:30事件名称为Page_Init
20:56:31事件名称为Page_InitComplete
20:56:32事件名称为Page_PreLoad
20:56:33事件名称为Page_Load
20:56:34事件名称为Page_LoadComplete
20:56:35事件名称为Page_PreRender
20:56:36事件名称为Page_SaveStateComplete
20:56:37事件名称为Page_Unload
注意上面空一行,为Page_Render事件没有显示。请问为什么?
作者:
books2009
时间:
2011-9-7 10:55
你好,严格来说Render不是事件;在处理的这个阶段,Page 对象会在每个控件上调用此方法。所有 ASP.NET Web 服务器控件都有一个用于写出发送给浏览器的控件标记的 Render 方法。
如果创建自定义控件,通常要重写此方法以输出控件的标记。不过,如果自定义控件只合并标准的 ASP.NET Web 服务器控件,不合并自定义标记,则不需要重写 Render 方法。
这是MSDN中的描述,虽然他有事件特征,也是这个时候来执行,但页面中的这个事件内容不会执行
作者:
books2009
时间:
2011-9-7 10:55
你这种求证精神很好
作者:
bool_sir
时间:
2011-9-7 19:34
谢谢老师指点 还是有点没听明白 。“不过,如果
自定义控件只合并标准的 ASP.NET Web 服务器控件,不合并自定义标记
,则不需要重写 Render 方法。
”这一段不明白
作者:
books2009
时间:
2011-9-8 10:18
你好 要了解你红色标记的这句话,就一定要对自定义控件有深入了解,如自定义控件完全是你自己定义的,还是你继承了某个服务器控件来拓展定义的。。。完全自己定义的话,就需要Render,这样才能输出标记到浏览器,如果是继承某个服务器控件的,如你继承了TextBox,想做一个新的属于自己的文本框,那就不一定要Render了,只做你需要修订的地方好了。
作者:
bool_sir
时间:
2012-2-12 14:56
谢谢老师的解答,依然坚持在看《ASP.NET从入门到实践》,不得不说,这是一本很适合新手学习的书。现在在看实例章节了,比这个问题提问的时候,又有多了新的认知,感谢您一直以来不厌其烦对我的帮助,谢谢。
作者:
wfyyf
时间:
2012-3-17 10:39
必须有个老师 没有老师感觉学不会啊
欢迎光临 万卷图书 (http://wanjuanchina.net/)
Powered by Discuz! 7.0.0