日期:2009-11-15  浏览次数:20540 次

  在ASP.NET中一个网页或窗口被看成一个WEB Form,Web Form 被看成是一个对象而被赋予了属性、方法,事件。.NET架构里面一个比较重要的概念就是"对象":所有的控件都是对象,甚至数据类型都成了对象;每种数据类型都有自己特有的属性和方法。


  WEB FORM的后缀名是ASPX。当一个浏览器第一次请求一个ASPX文件时,WEB FORM页面将被CLR(common language runtime)编译器编译。此后,当再有用户访问此页面的时候,由于ASPX页面已经被编译过,所以,CLR会直接执行编译过的代码。

  为了简化程序员的工作,ASPX页面不需要手工编译,而是在页面被调用的时候,由CLR自行决定是否编译。一般来说,下面两种情况下,ASPX会被重新编译:

  1.ASPX页面第一次被浏览器请求;

  2.ASPX被改写

  由于ASPX页面可以被编译,所以ASPX页面具有组件一样的性能。这就使得ASPX页面至少比同样功能的ASP页面快250%!

  WEB页面处理过程

  和所有的服务器端进程一样,当ASPX页面被客户端请求时,页面的服务器端代码被执行,执行结果被送回到浏览器端。这一点和ASP并没有太大的不同。

  但是,ASP.net的架构为我们做了许多别的事情。比如,它会自动处理浏览器的表单提交,把各个表单域的输入值变成对象的属性,使得我们可以像访问对象属性那样来访问客户的输入。它还把客户的点击映射到不同的服务器端事件。

  WEB Form的处理过程如下:

  用户对Server Control的一次操作,就可能引起页面的一次往返处理:页面被提交到服务器端,执行响应的事件处理代码,重建页面,然后返回到客户端。

  每一次页面被请求,或者页面事件被提交到服务器,ASP.net运行环境将执行必要的代码,重建整个页面,把结果页面送到浏览器,然后抛弃页面的变量、控件的状态和属性等等页面信息。当下一次页面被处理时,ASP.net运行环境是不知道它的上一次执行情况的。

  在ASP.net中,页面对象的属性、页面控件的属性被称为"view state"(页面状态)。页面状态在ASP.net中被受到特别关照。请看服务器端(page1.ASPx)的代码:

<!--源文件:form\web页面简介\page1.ASPx-->
<HTML>
<BODY>
<SCRIPT language="VB" runat="server">
Sub ShowValues(Sender As Object, Args As EventArgs)
divResult.innerText = "You selected '" _
& selOpSys.value & "' for machine '" _
& txtName.value & "'."
End Sub
</SCRIPT>
<DIV id="divResult" runat="server">
</DIV>
<FORM runat="server">
机器名:
<INPUT type="text" id="txtName" runat="server">
<P />
操作系统:
<select id="selOpSys" size="1" runat="server">
<OPTION>Windows 95</OPTION>
<OPTION>Windows 98</OPTION>
<OPTION>Windows NT4</OPTION>
<OPTION>Windows 2000</OPTION>
</SELECT>
<P />
<INPUT type="submit" value="Submit" runat="server" onserverclick="ShowValues">
</FORM>
</BODY>
</HTML>

  运行后将自动被解释成客户端代码,如下:

<HTML>
<BODY>
You selected 'Windows 98' for machine 'iceberg'.
<FORM name="ctrl0" method="post" action="pageone.ASPx" id="ctrl0">
<INPUT type="hidden" name="__VIEWSTATE" value="a0z1741688109__x">
机器名:
<INPUT type="text" id="txtName" name="txtName" value="tizzy">
<P />
操作系统:
<SELECT id="selOpSys" size="1" name="selOpSys">
<OPTION value="Windows 95">Windows 95</OPTION>
<OPTION selected value="Windows 98">Windows 98</OPTION>
<OPTION value="Windows NT4">Windows NT4</OPTION>
<OPTION value="Windows 2000">Windows 2000</OPTION>
</SELECT>
<P />
<INPUT type="submit" value="Submit">
</FORM>
</BODY>
</HTML>

  对于上面的代码,服务器端控件能在服务器端脚本中被自由运用。如果我们用传统的ASP代码实现上述的功能的话:

If Len(Request.Form("selOpSys")) > 0 Then
StrOpSys = Request.Form("selOpSys")
StrName = Request.Form("txtName")
Response.Write("You selected '" & strOpSys _
& "' for machine '" & strName & "'.")
End If


  如果我们用ASP.net的话,程序代码如下:

If Len(selOpSys.value) > 0 Then
Response.Write("You selected '" & selOpSys.value _
& "' for machine '" & txtName.value & "'.")
End If

  通过上面例子不难看出:ASP.net页面具有组件方式的方便性和灵活性。


  Web Form事件模型  

  在ASP.net中,事件是一个非常重要的概念。我们举两个例子来说明在Web Form 中的应用。
  例子一:多按钮事件

  我们在一个<form></form>里面有几个按钮,多个事件的响应我们该怎么处理呢?在ASP.net中有很好的处理