Welcome 微信登录

首页 / 网页编程 / ASP.NET / 浅谈ASP.NET内部机制(三)

浅谈ASP.NET内部机制(三)2011-09-15 博客园 小洋前言:当我们把页面中的数据包含在表单中发送到服务器的时候,数据到底是以什么形式发送的?服 务器接受到提交的数据后是如何读取这些数据,又是如何要决定来引发事件的?我们怎么样才能让我们自 定义的控件能够在服务器端触发事件?为什么服务器控件有的要实 IPostBackEventHandler,IPostBackDataHandler?.....

大家已经在知道,在我们开发ASP.NET网站的时候,每个服务器控件都有自己的ID。为了后面更好的展 开,下面我们就来简单的看看这个场景:当我们在浏览器中点击了一个服务器控件,如 Button,此时页 面回传给服务器,然后服务器就引发控件的Click等事件,这个场景是简单的不能在简单了。我们来进一 步看,我们知道,不是所有的控件都会在服务器端触发事件的,比如 submit按钮,这个按钮也同样可以 把表单数据传到服务器,但是这个控件不能在服务器端触发事件。其实在一个页面提交到了服务器之后, 服务器就会检查是哪个控件引起了页面提交,然后就把这个控件的ID找到,然后再在我们请求的那个页面 ,如Default.aspx (假设我们点击按钮,请求的是Default.aspx),去找是否有服务器控件的ID和此时提交 页面的ID是一样的,如果有,那么就在页面的生命周期的合适的时候,引发事件,在把处理的结果返回; 如果没有,服务器就不做什么了特别的处理。

还有一点要注意的是,在查找那个控件的ID 的时候,页面(如Default.aspx),已经被编译成为了一 个继承自Page的类

当然,上面说的只是一个很粗略额过程,希望大家有个总体的认识。下面就细致的讲解。

我通过一个流程来解释:

1.我们首先请求一个服务器端的页面,如:http://localhost/Demo/Default.aspx。为了方便解释, 假设页面只有三个服务器控件:TextBox,DropDowmList,Button

定义如下:

<%@ Page Language=”C#” %>
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”>
<head runat=”server”>
<title>Untitled Page</title>
</head>
<body>
<form id=”form1” runat=”server”>
<asp:TextBox runat=”server” ID=”TextBox1” />


<asp:DropDownList runat=”server” ID=”DropDownList1”>
<asp:ListItem Text=”Text1” Value=”Value1” />
<asp:ListItem Text=”Text2” Value=”Value2” />
<asp:ListItem Text=”Text3” Value=”Value3” />
</asp:DropDownList>


<asp:Button runat=”server” Text=”Submit” />
</form>
</body>
</html>