ASP.NET中的事件处理
2018-06-17 20:30:04来源:未知 阅读 ()
![新老客户大回馈,云服务器低至5折](/info/templets/default/images/760x90_D.jpg)
一、ASP.NET中的事件主要支持3个主要的事件组:
1、包含在asp.net生成页面时自动生成,我们使用这些事件建立页面(如page_load等)
2、包含了用户与页面交互时发生的所有事件(这种最强大)
3、html内部的事件,这些事件在浏览器上执行(主要是由javascript来实现)。
在C#语言中,事件的处理主要有两种方法:
1、委托式事件处理模式(Delegation Event Model) (VS2003中需要手工建立事件的委托关系,VS2005不需要了。)
2、对可重载方法(Event Method)的重载 (在控件代码中重载方法)
二、ASP.NET服务端添加客户端事件:
服务器控件并不是所有的操作都是在服务器端执行的,有的事件是通过客户端脚本来执行的,这样可以大大增强服务器控件的可用性。如ASP.NET验证控件,可以把部分工作放在客户端进行验证。
ASP.NET服务器控件可以发送两种客户端脚本:
1、客户端脚本块:客户端脚本块通常是用JavaScript编写的,其中通常包含在发生特定的客户端事件时执行的函数。
发送脚本块的方法是使用System.Web.UI.Page类包含的两个方法可以将客户端代码发送到由ASP.NET Web页面提供的HTML中:
(1)、RegisterStartupScript(key,script):在Web窗体的结尾处(在</form> 标记之前)发送脚本块。
(2)、RegisterClientScriptBlock(key,script):在Web窗体的开始处(紧接着<form runat="server">标识之后)发送脚本块。
如:
![](/info/upload/20180618/owjiepwmfhg.gif)
2
![](/info/upload/20180618/xaj0ti4yrcd.gif)
3
![](/info/upload/20180618/mc2pxo3llyo.gif)
4
![](/info/upload/20180618/ekod3ityyuq.gif)
5
![](/info/upload/20180618/mc2pxo3llyo.gif)
6
![](/info/upload/20180618/b3ezsjuhw5g.gif)
7
![](/info/upload/20180618/mc2pxo3llyo.gif)
8
![](/info/upload/20180618/ekod3ityyuq.gif)
9
![](/info/upload/20180618/mc2pxo3llyo.gif)
10
![](/info/upload/20180618/b3ezsjuhw5g.gif)
11
![](/info/upload/20180618/0iocwc2hrio.gif)
2、客户端HTML属性:客户端HTML属性提供将客户端事件与客户端脚本联系在一起的方法。
这种方法只适用于从System.Web.UI.WebControls.WebControl类导出的服务器控件,因为从这个类导出的控件会发送某些HTML元素。
WebControl类包含一个将HTML元素属性添加到由Web控件发出的HTML元素的方法,该方法称为AddAttributesToRender(),它只有一个输入参数,即HtmlTextWriter的实例。
当然在现在开发控件中,也没必要通过这种方式来为HTML元素添加事件,特别在采用AJAX模式的情况下,完全可以在客户端通过$addHandler来为HTML元素绑定事件。
![](/info/upload/20180618/xaj0ti4yrcd.gif)
2
![](/info/upload/20180618/mc2pxo3llyo.gif)
3
![](/info/upload/20180618/mc2pxo3llyo.gif)
4
![](/info/upload/20180618/0iocwc2hrio.gif)
5
![](/info/upload/20180618/owjiepwmfhg.gif)
6
![](/info/upload/20180618/xaj0ti4yrcd.gif)
7
![](/info/upload/20180618/mc2pxo3llyo.gif)
8
![](/info/upload/20180618/mc2pxo3llyo.gif)
9
![](/info/upload/20180618/mc2pxo3llyo.gif)
10
![](/info/upload/20180618/mc2pxo3llyo.gif)
11
![](/info/upload/20180618/0iocwc2hrio.gif)
下面的例子说明了ASP.NET服务端如何添加客户端事件:
![](/info/upload/20180618/owjiepwmfhg.gif)
2
![](/info/upload/20180618/owjiepwmfhg.gif)
3
![](/info/upload/20180618/owjiepwmfhg.gif)
4
![](/info/upload/20180618/owjiepwmfhg.gif)
5
![](/info/upload/20180618/owjiepwmfhg.gif)
6
![](/info/upload/20180618/owjiepwmfhg.gif)
7
![](/info/upload/20180618/owjiepwmfhg.gif)
8
![](/info/upload/20180618/owjiepwmfhg.gif)
9
![](/info/upload/20180618/owjiepwmfhg.gif)
10
![](/info/upload/20180618/owjiepwmfhg.gif)
11
![](/info/upload/20180618/owjiepwmfhg.gif)
12
![](/info/upload/20180618/owjiepwmfhg.gif)
13
![](/info/upload/20180618/xaj0ti4yrcd.gif)
14
![](/info/upload/20180618/mc2pxo3llyo.gif)
15
![](/info/upload/20180618/ekod3ityyuq.gif)
16
![](/info/upload/20180618/mc2pxo3llyo.gif)
17
![](/info/upload/20180618/ekod3ityyuq.gif)
18
![](/info/upload/20180618/mc2pxo3llyo.gif)
19
![](/info/upload/20180618/mc2pxo3llyo.gif)
20
![](/info/upload/20180618/mc2pxo3llyo.gif)
21
![](/info/upload/20180618/mc2pxo3llyo.gif)
22
![](/info/upload/20180618/ekod3ityyuq.gif)
23
![](/info/upload/20180618/mc2pxo3llyo.gif)
24
![](/info/upload/20180618/mc2pxo3llyo.gif)
25
![](/info/upload/20180618/b3ezsjuhw5g.gif)
26
![](/info/upload/20180618/b3ezsjuhw5g.gif)
27
![](/info/upload/20180618/b3ezsjuhw5g.gif)
28
![](/info/upload/20180618/0iocwc2hrio.gif)
三、通过客户端事件引发服务端事件:
其实服务端控件的服务端事件是通过客户端的JavaScript模拟出来的,如我在页面上添加了一个服务器控件DropDownList,并设置其AutoPostBack为True,然后设置它的 SelectedIndexChanged事件
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
}
运行页面后发现HTML代码为:可以看出服务端SelectedIndexChanged事件模拟成JavaScript中的onchange事件。
![](/info/upload/20180618/owjiepwmfhg.gif)
2
![](/info/upload/20180618/owjiepwmfhg.gif)
3
![](/info/upload/20180618/owjiepwmfhg.gif)
4
![](/info/upload/20180618/owjiepwmfhg.gif)
5
![](/info/upload/20180618/owjiepwmfhg.gif)
6
![](/info/upload/20180618/owjiepwmfhg.gif)
7
![](/info/upload/20180618/owjiepwmfhg.gif)
8
![](/info/upload/20180618/owjiepwmfhg.gif)
9
![](/info/upload/20180618/owjiepwmfhg.gif)
10
![](/info/upload/20180618/owjiepwmfhg.gif)
11
![](/info/upload/20180618/owjiepwmfhg.gif)
12
![](/info/upload/20180618/owjiepwmfhg.gif)
13
![](/info/upload/20180618/owjiepwmfhg.gif)
14
![](/info/upload/20180618/owjiepwmfhg.gif)
15
![](/info/upload/20180618/owjiepwmfhg.gif)
16
![](/info/upload/20180618/xaj0ti4yrcd.gif)
17
![](/info/upload/20180618/mc2pxo3llyo.gif)
18
![](/info/upload/20180618/mc2pxo3llyo.gif)
19
![](/info/upload/20180618/ekod3ityyuq.gif)
20
![](/info/upload/20180618/mc2pxo3llyo.gif)
21
![](/info/upload/20180618/b3ezsjuhw5g.gif)
22
![](/info/upload/20180618/ekod3ityyuq.gif)
23
![](/info/upload/20180618/ekod3ityyuq.gif)
24
![](/info/upload/20180618/mc2pxo3llyo.gif)
25
![](/info/upload/20180618/mc2pxo3llyo.gif)
26
![](/info/upload/20180618/mc2pxo3llyo.gif)
27
![](/info/upload/20180618/b3ezsjuhw5g.gif)
28
![](/info/upload/20180618/b3ezsjuhw5g.gif)
29
![](/info/upload/20180618/0iocwc2hrio.gif)
30
![](/info/upload/20180618/owjiepwmfhg.gif)
31
![](/info/upload/20180618/owjiepwmfhg.gif)
32
![](/info/upload/20180618/owjiepwmfhg.gif)
33
![](/info/upload/20180618/owjiepwmfhg.gif)
34
![](/info/upload/20180618/owjiepwmfhg.gif)
35
![](/info/upload/20180618/owjiepwmfhg.gif)
36
![](/info/upload/20180618/owjiepwmfhg.gif)
37
![](/info/upload/20180618/owjiepwmfhg.gif)
38
![](/info/upload/20180618/owjiepwmfhg.gif)
39
![](/info/upload/20180618/owjiepwmfhg.gif)
40
![](/info/upload/20180618/owjiepwmfhg.gif)
41
![](/info/upload/20180618/owjiepwmfhg.gif)
42
![](/info/upload/20180618/owjiepwmfhg.gif)
43
![](/info/upload/20180618/owjiepwmfhg.gif)
44
![](/info/upload/20180618/owjiepwmfhg.gif)
45
![](/info/upload/20180618/owjiepwmfhg.gif)
46
![](/info/upload/20180618/owjiepwmfhg.gif)
47
![](/info/upload/20180618/owjiepwmfhg.gif)
既然服务器端控件的事件是通过客户端的JavaScript模拟出来,那么我们就可以通过客户端事件来引发服务器事件。
在控件开发中,控件的服务端事件就是通过客户端的JavaScript模拟出来的(__doPostBack)
如例子ClientToServerEvent(附件中有代码)
通过DropDownList的onchange客户端事件来引发服务端控件Button的服务端事件Click事件,如:
![](/info/upload/20180618/owjiepwmfhg.gif)
2
![](/info/upload/20180618/owjiepwmfhg.gif)
3
![](/info/upload/20180618/owjiepwmfhg.gif)
4
![](/info/upload/20180618/owjiepwmfhg.gif)
5
![](/info/upload/20180618/owjiepwmfhg.gif)
6
![](/info/upload/20180618/owjiepwmfhg.gif)
7
![](/info/upload/20180618/owjiepwmfhg.gif)
8
![](/info/upload/20180618/owjiepwmfhg.gif)
9
![](/info/upload/20180618/owjiepwmfhg.gif)
10
![](/info/upload/20180618/owjiepwmfhg.gif)
11
![](/info/upload/20180618/owjiepwmfhg.gif)
12
![](/info/upload/20180618/owjiepwmfhg.gif)
13
![](/info/upload/20180618/xaj0ti4yrcd.gif)
14
![](/info/upload/20180618/mc2pxo3llyo.gif)
15
![](/info/upload/20180618/ekod3ityyuq.gif)
16
![](/info/upload/20180618/mc2pxo3llyo.gif)
17
![](/info/upload/20180618/ekod3ityyuq.gif)
18
![](/info/upload/20180618/mc2pxo3llyo.gif)
19
![](/info/upload/20180618/mc2pxo3llyo.gif)
20
![](/info/upload/20180618/mc2pxo3llyo.gif)
21
![](/info/upload/20180618/mc2pxo3llyo.gif)
22
![](/info/upload/20180618/b3ezsjuhw5g.gif)
23
![](/info/upload/20180618/mc2pxo3llyo.gif)
24
![](/info/upload/20180618/mc2pxo3llyo.gif)
25
![](/info/upload/20180618/ekod3ityyuq.gif)
26
![](/info/upload/20180618/mc2pxo3llyo.gif)
27
![](/info/upload/20180618/b3ezsjuhw5g.gif)
28
![](/info/upload/20180618/b3ezsjuhw5g.gif)
29
![](/info/upload/20180618/0iocwc2hrio.gif)
30
![](/info/upload/20180618/owjiepwmfhg.gif)
在页面上写JavaScript脚本:
![](/info/upload/20180618/owjiepwmfhg.gif)
2
![](/info/upload/20180618/owjiepwmfhg.gif)
3
![](/info/upload/20180618/xaj0ti4yrcd.gif)
4
![](/info/upload/20180618/mc2pxo3llyo.gif)
5
![](/info/upload/20180618/ekod3ityyuq.gif)
6
![](/info/upload/20180618/mc2pxo3llyo.gif)
7
![](/info/upload/20180618/b3ezsjuhw5g.gif)
8
![](/info/upload/20180618/mc2pxo3llyo.gif)
9
![](/info/upload/20180618/ekod3ityyuq.gif)
10
![](/info/upload/20180618/mc2pxo3llyo.gif)
11
![](/info/upload/20180618/b3ezsjuhw5g.gif)
12
![](/info/upload/20180618/0iocwc2hrio.gif)
13
![](/info/upload/20180618/owjiepwmfhg.gif)
这样当我的DropDownList选项改变时,触发onchange客户端事件,然后由该事件引发Button服务端事件。
四、ASP.NET事件模型机制
1、ASP.NET之所以对于以前的ASP是一个革命性的巨变,在很大程度上是由于ASP.NET技术是一种基于事件驱动的全新技术。
2、在ASP.NET中时间的触发和处理是在客户端和服务端进行的。
3、ASP.NET中,如果频繁和服务器进行事件信息传递,会大大降低服务器的处理效率和性能,因而有些事件如OnMouseOver没有提供;
4、但提供了Change事件,为了提高效率它们被缓存在客户端,等到再一次事件信息被发送到服务器端时一同发送回去。
如文本框的change事件,下拉框的change事件,
如两个控件的change事件中:
![](/info/upload/20180618/owjiepwmfhg.gif)
2
![](/info/upload/20180618/xaj0ti4yrcd.gif)
3
![](/info/upload/20180618/mc2pxo3llyo.gif)
4
![](/info/upload/20180618/0iocwc2hrio.gif)
5
![](/info/upload/20180618/owjiepwmfhg.gif)
6
![](/info/upload/20180618/owjiepwmfhg.gif)
7
![](/info/upload/20180618/xaj0ti4yrcd.gif)
8
![](/info/upload/20180618/mc2pxo3llyo.gif)
9
![](/info/upload/20180618/0iocwc2hrio.gif)
如果控件本身的AutoPostBack设置为false(默认是false)时,文本框和下拉框发生
改变时,不会执行change事件的,而是将事件信息缓存在客户端,
当在页面上点击一个服务器端控件Button,
protected void Button1_Click(object sender, System.EventArgs e)
{
Response.Write("点击了Button按钮!<br>");
}
此时将客户端中的事件信息发送到服务器端,执行所有的事件,返回到客户端的信息为:
TextBox文本改变!
DropDownList控件选择改变!
点击了Button按钮!
具体例子代码见附件。
ServerToClientScript.rar
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- uniGUI之自定义JS事件动作ClientEvents(30) 2020-02-19
- Delphi - 鼠标上下滚动基础消息事件 2019-09-17
- ASP.NET简单验证码 2018-06-21
- .Net程序员玩转Android开发--ListView单击事件 2018-06-21
- 关于EventHandler的使用 2018-06-21
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash