学习ASP.NET的体会(一)

在 ASP.NET 中,整张 Web 页是放在一张大表单里面的。如:

 1<html>
 2<head><title>********</title>
 3</head>
 4<body>
 5<form action="”*****”" name="”FORM1”">
 6
 7** 网页的具体内容……  **
 8
 9</form>
10</body>
11</html>

在这个表单内可能放置了很多 html 控件如按钮、下拉菜单、文本框等。 ASP.NET 提供了一些服务器端 Web 控件。在服务器上执行的时候,通过一定的条件, Web 窗体将这些服务器 Web 控件转换为普通的 html 控件。比如一个按钮:

1<asp:button backcolor="DodgerBlue" bordercolor="Lavender" forecolor="White" height="22" id="B_submit" runat="server" text="  确定  " width="37"></asp:button>

经过转换后就变成了:

1<input id="B_submit" name="B_submit" style="color:White;background-color:DodgerBlue;border-color:Lavender;height:22px;width:37px;" type="submit" value="  确定  "/>

其实 asp.net 利用的还是现有的一些技术。只不过它对这些现有技术进行了封装,使你在使用中将自己提高到了一个应用的层面上。

在 asp.net 中,一个 web 窗体被看成了一个对象。它的数据成员就是那些 Web 控件和你自己定义的变量,它的函数成员就是那些用来响应客户端操作的函数,当然还有你自己定义的函数。我大致讲一下用户请求一张 web 页的时候发生了一些什么事件:

说明:一张 web 页由三个文件来实现: HTML 、后台程序代码、资源文件。

假定: web 页中有一个标签控件和一个按钮控件,在初始的时候,标签控件的文本为:“初始”,当用户点击按钮以后,标签控件的文本变为了:“点击”

首先,用户第一次请求页面时,先执行 web 页的 Page_Init过程,在这里通常对组件进行初始化。然后执行Page_Load过程,在这里,我们可以做一些初始化的工作。比如:设定标签控件的文本为:“初始”。然后,由于用户是第一次请求页面,所以没有什么其他事件发生。程序控制转为解释执行HTML代码页中的服务器代码。在HTML中,有一个

 1<asp:label>这就是我们的标签控件。因为我们在Page_Load过程中对标签的文本赋值了,所以现在程序在将<asp:label>转换为<span id="Label1" style="width:102px;">初始</span>。而按钮的转换就类似于上面我已经说过内容。经过这些转换以后,HTML页内的代码变成了标准的代码。然后,这些代码被用户浏览器得到了。经过解析后,用户就可以看到一个“ **初始** ”和一个按钮。 
 2
 3现在,用户对着按钮点击了一下。于是,表单就提交了。(提交的细节,我下面再说) 
 4
 5通过提交的表单,服务器得知这是用户点击了按钮控件。并且这是用户第二次请求该页面了。于是,程序又执行Page_Init过程、Page_Load过程。这时,因为用户点击了按钮控件,则程序开始执行另一个函数,这个函数是用来专门处理用户点击了按钮控件这个事件的。在这里,我们将标签控件的文本设置为:“点击”。然后程序控制又转到HTML页。跟上面第一次请求时一样。于是用户在客户端通过浏览器就可以看到一个“点击”和一个按钮了。 
 6
 7实际使用中,后台的程序代码是被编译成二进制代码了的。 
 8
 9下面说说提交表单的细节。 
10
11用户的操作通常会产生一些事件,但是都是一些客户端事件。就是说这些跟服务器是无关的。  要与服务器取得联系就要通过请求。微软选择了提交。 
12
13在.net中,web窗体的内容都放在了一个大表单里。对于按钮,微软都将它们转换为了<input submit="" type="”" ”=""/>就是html里的提交按钮。因为每个按钮的id、name不同,所以,服务器可以分辨出用户按的是哪一个按钮,进而产生相应的服务器事件。如上面例子里的用户点击按钮事件。并进行相应的操作。对于其他的控件如下拉菜单,如果希望在用户改变了菜单的选择项以后由服务器进行处理,则也需要将客户端事件转换为服务器端事件。. net在表单里添加了几个<input hidden="" type="”" ”=""/>。当用户改变菜单选择项以后,会产生一个客户端事件 onchange。微软提供了一个通用的函数_dopostback(); 查看网页源文件可以看到,在下拉菜单里有onchange="__doPostBack('Drop_subject','')"。下面是这个函数的源码: 
14
15function __doPostBack (eventTarget, eventArgument) { 
16
17var theform = document.Form1;//Form1  是表单的名字 
18
19theform.__EVENTTARGET.value = eventTarget;// __EVENTTARGET  是  hidden 
20
21theform.__EVENTARGUMENT.value = eventArgument;// __EVENTARGUMENT  是  hidden 
22
23theform.submit();//  提交表单 
24
25} 
26
27其实您可以看到,  .net  是通过隐藏控件来传递客户端信息的,例如产生事件的控件的名字。然后,提交表单。这样,服务器端就可以根据隐藏控件来确定产生事件的控件的名字,并产生服务器事件,进而对该事件进行处理。 
28
29可以看到,  Asp.net  相对与  asp 3.0  不同的地方在于  .net  对很多功能进行了封装,并且提供了很多新的服务器组件。使得程序的编写更加简单。在  asp3.0  中,程序代码全部是嵌入  HTML  代码中的。好处在于灵活度较高,但是却不容易在同一张网页中加入很多功能(因为面对大量嵌入  HTML  代码中的  ASP  代码,错误的产生是很难避免的)。在  asp.net  中,这些得到了改观。  .net  将程序代码与  HTML  代码分割开了。并且提供了大量方便使用的服务器控件。这使得开发  asp.net  程序变得很简单。但是在实际使用过程中,我发现如果过于依赖这些控件,程序设计的灵活性将变小。并且在使用过程中还发现了不少  bug  。</asp:label></asp:label>
Published At
Categories with Web编程
Tagged with
comments powered by Disqus