您当前的位置:黑客软件园网络学院站长学院ASP.NET → asp.net夜话之五:Page类和回调技术

asp.net夜话之五:Page类和回调技术

来源:不详  作者:佚名  时间:2009-3-23 20:29:45 发布:黑客软件园
在今天我主要要介绍的有如下知识点:

  Page类介绍

  Page的生命周期

  IsPostBack属性

  ClientScriptManager类

  回调技术(CallBack)

  Page类介绍

  asp.net有时候也被成为WebForm,因为开发一个asp.net页面就像开发一个WinFrom窗体一样,我们同样可以采用拖拽控件、双击产生相关处理代码的方法。在asp.net中,创建一个页面可以采用两种模型。

  单页模型

  用Dreamweaver创建的asp.net页面就是单页模型,当然利用Visual Studio 2005也能创建单页模型,不过在Visual Studio 2005中创建的页面默认不是单页模型,要想在Visual Studio 2005创建单页模型的网页如下:

asp.net夜话之五:Page类和回调技术

  注意确保“将代码放在单独的文件中”选项处于未选中状态,默认情况下这个选项是处于选中状态的。这样就创建了单页模型的网页。

  此时的页面代码如下:

<%@PageLanguage="C#"%>
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<scriptrunat="server">
</script>
<htmlxmlns="http://www.w3.org/1999/xhtml">
<headrunat="server">
  <title>无标题页</title>
</head>
<body>
  <formid="form1"runat="server">
  <div>
  </div>
  </form>
</body>
</html>

  注意在页面中有这样一句代码:

<scriptrunat="server">
</script>

  这句代码与普通javascript语句块不同的是有一个runat="server"属性,表示这里的代码是在服务器上运行的C#代码。切换到设计视图,然后双击页面,然后这部分会变成如下的样子:

<scriptrunat="server">
  protectedvoidPage_Load(objectsender,EventArgse)
  {
  }
</script>

  其中Page_Load就是页面加载的时候在服务器上运行的方法。

  单页模型的特点是HTML标记、控件代码及服务器端运行的C#代码全部包含在一个aspx页面中,Web服务器第一次运行该页面的时候会将这个页面生成一个类文件,对于上面的Index.aspx页面,会生成ASP.Index_aspx的类,然后再将这个ASP.Index_aspx类编译成IL代码,Web服务器通过CLR(Common Language Runtime,通用语言运行环境)运行相应的IL代码。

  单页模型的缺点是页面和代码混在一起,维护起来较为麻烦。

  代码页面分离模式

  代码页面模式就是将页的标记(HTML代码)和服务器端元素放在.aspx页面中,而也代码在位于一个.aspx.cs中。采用默认方式创建的aspx网页就是这种方式。

  下面就是一个采用代码页面分离模式创建的Home.aspx页面的代码:

<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="Home.aspx.cs"Inherits="Home"%>
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml">
<headrunat="server">
  <title>无标题页</title>
</head>
<body>
  <formid="form1"runat="server">
  <div>
  </div>
  </form>
</body>
</html>

  其对应的页代码是:

usingSystem;
usingSystem.Data;
usingSystem.Configuration;
usingSystem.Collections;
usingSystem.Web;
usingSystem.Web.Security;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
usingSystem.Web.UI.WebControls.WebParts;
usingSystem.Web.UI.HtmlControls;
publicpartialclassHome:System.Web.UI.Page
{
  protectedvoidPage_Load(objectsender,EventArgse)
  {
  }
}

  首先要关注的aspx的头部分代码:

<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="Home.aspx.cs"Inherits="Home"%>

  @Page是一个页面指令,在这里Language="C#"指明了当前页面采用的后台代码是C#语言,CodeFile="Home.aspx.cs"表示这个页面对应的页代码文件是Home.aspx.cs这个文件,Inherits="Home"表示当前aspx页继承自Home这个类。

  现在再关注一下页代码文件声明:

publicpartialclassHome:System.Web.UI.Page

  从这部分代码可以看出Home类是继承自System.Web.UI.Page类的。注意这里还有一个C#2.0的关键字partial,这个关键字表示当前代码是一个局部类,以表示这个类是构成整个Web页面窗体的一部分。Web服务器运行这个页面的时候最终会将aspx页面和对应的页代码编译成一个类文件,然后生成IL代码。

  代码页面分离模式的好处是页面展示部分和逻辑控制部分的代码分离开来,便于管理和维护,这也是微软推荐的开发方式。

  asp.net页面的声明周期

  asp.net页面运行的时候将经历一个声明周期,这个生命周期中会进行一系列的操作,调用一系列的方法。了解asp.net页面的生命周期对于精确控制页面的控件呈现方式和行为非常重要。

  一般说来一个常规页面要经历如下几个生命周期阶段:

阶段说明
页请求页请求发生在页生命周期开始之前。用户请求页时,ASP.NET 将确定是否需要分析和编译页(从而开始页的生命周期),或者是否可以在不运行页的情况下发送页的缓存版本以进行响应。
开始在开始阶段,将设置页属性,如 Request 和 Response。在此阶段,页还将确定请求是回发请求还是新请求,并设置 IsPostBack 属性。此外,在开始阶段期间,还将设置页的 UICulture 属性。
页初始化页初始化期间,可以使用页中的控件,并将设置每个控件的 UniqueID 属性。此外,任何主题都将应用于页。如果当前请求是回发请求,则回发数据尚未加载,并且控件属性值尚未还原为视图状态中的值。
加载加载期间,如果当前请求是回发请求,则将使用从视图状态和控件状态恢复的信息加载控件属性。
验证在验证期间,将调用所有验证程序控件的 Validate 方法,此方法将设置各个验证程序控件和页的 IsValid 属性。
回发事件处理如果请求是回发请求,则将调用所有事件处理程序。
呈现在呈现期间,视图状态将被保存到页,然后页将调用每个控件,以将其呈现的输出提供给页的 Response 属性的 OutputStream。
卸载完全呈现页、将页发送至客户端并准备丢弃时,将调用卸载。此时,将卸载页属性(如 Response 和 Request)并执行清理。

  在页的生命周期中,一般会有如下事件:

页事件典型使用
Page_PreInit使用 IsPostBack 属性确定是否是第一次处理该页。

  创建或重新创建动态控件。

  动态设置主控页。

  动态设置 Theme 属性。

  读取或设置配置文件属性值。

  注意:如果请求是回发请求,则控件的值尚未从视图状态还原。如果在此阶段设置控件属性,则其值可能会在下一阶段被改写。

Page_Init读取或初始化控件属性。
Page_Load读取和更新控件属性。
Control events执行特定于应用程序的处理:

  如果页包含验证程序控件,请在执行任何处理之前检查页和各个验证控件的 IsValid 属性。

  处理特定事件,如 Button 控件的 Click 事件。

Page_PreRender对页的内容进行最后更改。
Page_Unload执行最后的清理工作,可能包括:

  关闭打开的文件和数据库连接。

  完成日志记录或其他特定于请求的任务。

[1] [2] [3] [4] [5]  下一页

[]

相关文章
广告赞助
相关阅读