文章教程

4.4Web窗体基础

8/31/2020 9:37:14 PM 人评论 次浏览

4.4 Web窗体基础

在应用程序的开发过程中会用到很多Web窗口,在只用第三方UI的情况下也会用多个窗口来完成项目。在项目分层结构中,系统提供的Web窗口提供了表示层的基础。所有使用到的Web窗口都是有系统提供的,在开发过程中可以继承Web窗口的类来完成客户需要的Web窗体。

4.4.1 基于事件的编程模型

在ASP.NET中,Web窗口都是以事件形式驱动的模式,程序从运行到页面加载完成执行如下过程。

alt 母版页控件Init事件。

alt 内容控件Init事件。

alt 母版页Init事件。

alt 内容页Init事件。

alt 内容页Load事件。

alt 母版页Load事件。

alt 内容控件Load事件。

alt 内容页PreRender事件。

alt 母版页PreRender事件。

alt 母版页控件PreRender事件。

alt 内容控件PreRender事件。

这些就是从打开浏览器到程序执行完成,窗口执行过的事件。下面通过表格的形式列出Web窗体执行了哪些事件。

alt

4.4.2 自动回发特性(AutoPostBack)

AutoPostBack标识可以根据用户提交的信息将页面自动发回服务器。在一些Web控件中,称为AutoPostBack属性。如果设置为true,当控件的某事件发生时,将发送一个request到服务器。例如,DropdownList控件的属性为AutoPostBack,如果将其设置为true,当用户在组合框中选择不同的值时,被触发的事件将发送一个request给服务器,此时用户信息将自动提交服务器。比如,该网页包含两个组合框控件:国家和城市。当用户选择国家时,适当的城市应该显示在另一组合框,为实现这一要求,可以设置国家组合框的AutoPostBack属性为true,当选择国家的组合框触发了事件,将有一个request请求自动发送给服务器,此时程序根据国家值从数据库读取适当的城市值,发送给客户端完成操作。

IsPostBack是Page类有一个bool类型的属性,用来判断针对当前Form的请求是第一次还是多次的请求。当IsPostBack=true时,表示不是第一次请求,称为PostBack,当IsPostBack=false时,表示为第一次请求。在ASP.NET框架内部有很多的请求需要判断IsPostBack的值,比如,LoadAllState等操作就需要在PostBack时进行。对于使用WebForm进行开发时,经常会在Page_Load中对IsPostBack进行处理,因为第一次请求时会执行Page_Load,在非第一次请求时同样也会执行Page_Load。ASP.NET中引入了服务器端事件,支持服务器端事件的控件,会发出对当前Form的请求,这样在很多情形下也就需要区别是否是对这个Form的第一次请求的处理。

下面讲述服务器按钮控件怎样来完成自动回发过程,代码如下。

alt

在上述代码中,为文本框赋予了一个当前时间值。运行上面的代码观察最终解释到客户端浏览器中的代码,如图4-26所示。

alt

图4-26 服务器最终产生的浏览器代码

单击页面上的按钮在文本框中显示一个当前时间,打开浏览器的源文件看到具体由服务器发回的所有代码。在图4-26中看到了添加的服务器按钮实际上被解释为一个“提交”按钮。

alt

这个“提交”按钮是按照表单的指向提交的,也就是说,实际的提交地址是本页面,

alt

这里采用post方式提交,也就是主体提交,这样的提交方式是将数据加密后重新传递给服务器。在代码中可以看到两个隐藏的域,

alt

服务器正是通过这两个隐藏的域来确定客户端和服务器端,回发事件也是通过它们确定服务器和客户端的数据同步的。因为HTTP协议是无状态协议,就是说,服务器和客户端都将保持对方的信息,这样在下次通信时才能认识对方。

4.4.3 Web窗体处理流程

Web窗体本身包含很多的属性和事件。下面是窗体的处理过程。

执行顺序如下。

(1)Page_Init:初始化值或连接。

(2)Page_Load:主要使用IsPostBack,该事件主要执行一系列操作来首次创建ASP.NET页面或响应由投递引起的客户端事件。在此事件之前,已还原页面和控件视图状态。

(3)Page_DataBind:在页面级别上调用,也可在单个控件中调用。

(4)DataBind_PreRender:数据绑定预呈现,恰好在保存视图状态和呈现控件之前激发此事件。

(5)Page_Unload:此事件是执行最终清理工作的。

非确定事件顺序。

(1)Page_Error:如果在页面处理过程中出现未处理的例外,则激发error事件。

(2)Page_AbortTransaction:交易事件,事务处理中如果已终止交易,则激发此事件,购物车常用。

(3)Page_CommitTransaction:如果已成功交易,则激发此事件。

其实在用户没有发送请求之前还有很多的事件被执行。窗体的处理过程是首先客户通过浏览器向服务器端发送请求,服务器收到请求后,页面的基类将初始化页面的所有信息,其次执行用户编写的代码,再次处理各种用户数据,接着将数据组合成用户需要的格式数据并发送给客户端,最后销毁和释放占用的资源。具体执行代码如下所示。

alt

窗体的加载事件代码执行结果如图4-27所示。

alt

图4-27 窗体执行过程结果

上面的代码简单演示了窗体加载的几个简单函数。简单演示了窗体运行的过程。

4.4.4 ASP.NET中的page类

在编译器中添加的所有页面都继承于System.Web.UI.Page类,page类有很多的属性和方法,系统为用户提供了这些方法和属性,可以帮助开发者更快速地编写不同的程序。

属性列表如下。

alt

方法列表如下。

alt

具体的使用代码如下。

alt

在程序中添加的界面类都继承于系统窗体的基类System.Web.UI.Page,继承基类后,可以调用系统定义的方法和属性。这里调用了系统的窗体加载事件和判断是否回发的一个属性。

4.4.5 页面重定向

在ASP.NET中的六大内置对象中Response负责处理响应,就是处理由服务器端向客户端发送的响应,在这些响应中,有一个最重要的方法就是页面重定向,也就是Response.Redirect("WebForm1.aspx");这样的方法。Redirect表示将请求重定向到新URL并指定该新URL,具体代码如下。

alt

执行结果如图4-28所示。

alt

图4-28 重定向后的页面

4.4.6 HTML编码

在网页输出的过程中,有时会遇到输出HTML字符等特殊字符的情况,如果要在页面上输出一段前台的Html代码,如在界面上输出一段代码来表示弹出消息框。如果直接输出代码,就会直接弹出一个消息框,这时需要对想要输出的代码进行HTML编码,经过编码后的输出的HTML代码才能够被浏览器解释为用户看到的显示形式,具体代码如下。

alt

具体编码后的输出结果如图4-29所示。

alt

图4-29 HTML编码后的输出结果

这些编码其实是有固定格式的。下面是几个简单的编码后的符号。

alt

教程类别