知识大全 ASP.NET中的事件处理
Posted 事件
篇首语:学乃身之宝,儒为席上珍。君看为宰相,必用读书人。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 ASP.NET中的事件处理相关的知识,希望对你有一定的参考价值。
ASP.NET中的事件处理 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
一 ASP NET中的事件主要支持 个主要的事件组
包含在生成页面时自动生成 我们使用这些事件建立页面(如page_load等)
包含了用户与页面交互时发生的所有事件(这种最强大)
内部的事件 这些事件在浏览器上执行(主要是由javascript来实现)
在C#语言中 事件的处理主要有两种方法
委托式事件处理模式(Delegation Event Model) (VS 中需要手工建立事件的委托关系 VS 不需要了 )
对可重载方法(Event Method)的重载 (在控件代码中重载方法)
二 ASP NET服务端添加客户端事件
服务器控件并不是所有的操作都是在服务器端执行的 有的事件是通过客户端脚本来执行的 这样可以大大增强服务器控件的可用性 如ASP NET验证控件 可以把部分工作放在客户端进行验证
ASP NET服务器控件可以发送两种客户端脚本
客户端脚本块 客户端脚本块通常是用JavaScript编写的 其中通常包含在发生特定的客户端事件时执行的函数
发送脚本块的方法是使用System Web UI Page类包含的两个方法可以将客户端代码发送到由ASP NET Web页面提供的HTML中
( ) RegisterStartupScript(key script) 在Web窗体的结尾处(在</form> 标记之前)发送脚本块
( ) RegisterClientScriptBlock(key script):在Web窗体的开始处(紧接着<form runat= server >标识之后)发送脚本块
如 protected override void OnPreRender(EventArgs e) if (!Page ClientScript IsClientScriptBlockRegistered( Common )) Page ClientScript RegisterClientScriptBlock(typeof(Page) Common ClientJavaScriptCodeScipt( Common js )); if (!Page ClientScript IsClientScriptBlockRegistered(ScriptKey)) Page ClientScript RegisterClientScriptBlock(typeof(Page) ScriptKey ClientJavaScriptCodeScipt( DateTime js )); 客户端HTML属性 客户端HTML属性提供将客户端事件与客户端脚本联系在一起的方法
这种方法只适用于从System Web UI WebControls WebControl类导出的服务器控件 因为从这个类导出的控件会发送某些HTML元素
WebControl类包含一个将HTML元素属性添加到由Web控件发出的HTML元素的方法 该方法称为AddAttributesToRender() 它只有一个输入参数 即HtmlTextWriter的实例
当然在现在开发控件中 也没必要通过这种方式来为HTML元素添加事件 特别在采用AJAX模式的情况下 完全可以在客户端通过$addHandler来为HTML元素绑定事件 /// <summary> /// 将此控件呈现给指定的输出参数 /// </summary> /// <param name= output > 要写出到的HTML 编写器</param> protected override void AddAttributesToRender(HtmlTextWriter output) output AddAttribute( onmousedown setday(this); ); output AddAttribute( onkeypress EnsureNumeric(event) ); base AddAttributesToRender(output); 下面的例子说明了ASP NET服务端如何添加客户端事件 using System; using System Data; using System Configuration; using System Collections; using System Web; using System Web Security; using System Web UI; using System Web UI WebControls; using System Web UI WebControls WebParts; using System Web UI HtmlControls; namespace ServerToClientScript public partial class _Default : System Web UI Page protected void Page_Load(object sender EventArgs e) string script = return confirm( 真的要删除吗? ); ; this Button Attributes Add( onclick script); if ((!Page IsStartupScriptRegistered( PopUp )&&(!Page IsPostBack))) string scriptBlock = <script language= JavaScript >alert( 发送客户端脚本! );</script> ; Page RegisterStartupScript( PopUp scriptBlock);
三 通过客户端事件引发服务端事件
其实服务端控件的服务端事件是通过客户端的JavaScript模拟出来的 如我在页面上添加了一个服务器控件DropDownList 并设置其AutoPostBack为True 然后设置它的 SelectedIndexChanged事件 protected void DropDownList _SelectedIndexChanged(object sender EventArgs e)
运行页面后发现HTML代码为 可以看出服务端SelectedIndexChanged事件模拟成JavaScript中的onchange事件
<!DOCTYPE PUBLIC //W C//DTD XHTML Transitional//EN
transitional dtd > < xmlns= > <head><title> 无标题页 </title></head> <body> <form name= form method= post action= MNEvent aspx id= form > <div> <input type= hidden name= __EVENTTARGET id= __EVENTTARGET value= /> <input type= hidden name= __EVENTARGUMENT id= __EVENTARGUMENT value= /> <input type= hidden name= __LASTFOCUS id= __LASTFOCUS value= /> <input type= hidden name= __VIEWSTATE id= __VIEWSTATE value= /wEPDwULLTE ODI MjgzNjcPZBYCAgMPZBYCAgEPEGRkFgFmZGSYTeyI LmYps
yPH/GyUwiYs== /> </div> <script type= text/javascript > <! var theForm = document forms[ form ]; if (!theForm) theForm = document form ; function __doPostBack(eventTarget eventArgument) if (!theForm onsubmit || (theForm onsubmit() != false)) theForm __EVENTTARGET value = eventTarget; theForm __EVENTARGUMENT value = eventArgument; theForm submit(); // > </script> <div> <select name= DropDownList onchange= javascript:setTimeout( __doPostBack(\\ DropDownList \\ \\ \\ ) ) id= DropDownList > <option selected selected value= 男 >男</option> <option value= 女 >女</option> </select></div> <div> <input type= hidden name= __EVENTVALIDATION id= __EVENTVALIDATION value= /wEWBALgifCwDwKd I/lCgKU aSLBgLQuaSLBtn paAhgqUhPSsi GZsi eadh /> </div></form> </body> </> </>
既然服务器端控件的事件是通过客户端的JavaScript模拟出来 那么我们就可以通过客户端事件来引发服务器事件
在控件开发中 控件的服务端事件就是通过客户端的JavaScript模拟出来的(__doPostBack)
如例子ClientToServerEvent(附件中有代码)
通过DropDownList的onchange客户端事件来引发服务端控件Button的服务端事件Click事件 如 using System; using System Data; using System Configuration; using System Collections; using System Web; using System Web Security; using System Web UI; using System Web UI WebControls; using System Web UI WebControls WebParts; using System Web UI HtmlControls; namespace ServerToClientScript public partial class ClientToServerEvent : System Web UI Page protected void Page_Load(object sender EventArgs e) string strCMD = Page GetPostBackClientHyperlink(Button ); string script = @ Javacript:ConfirmUpdate( EVAL_MESSAGE ); ; script = script Replace( EVAL_MESSAGE strCMD); DropDownList Attributes Add( onchange script); protected void Button _Click(object sender EventArgs e) Response Write( 我从服务器来 已经保存! );
在页面上写JavaScript脚本
<script type= text/javascript > function ConfirmUpdate(cmd) if(confirm( 真的要保存吗? )) eval(cmd); //eval函数调用一个字符串中包含的命令 else alert( 我来自客户端 已经取消! ); </script>
这样当我的DropDownList选项改变时 触发onchange客户端事件 然后由该事件引发Button服务端事件
四 ASP NET事件模型机制
ASP NET之所以对于以前的ASP是一个革命性的巨变 在很大程度上是由于ASP NET技术是一种基于事件驱动的全新技术
在ASP NET中时间的触发和处理是在客户端和服务端进行的
ASP NET中 如果频繁和服务器进行事件信息传递 会大大降低服务器的处理效率和性能 因而有些事件如OnMouseOver没有提供
但提供了Change事件 为了提高效率它们被缓存在客户端 等到再一次事件信息被发送到服务器端时一同发送回去
如文本框的change事件 下拉框的change事件
如两个控件的change事件中 protected void DropDownList _SelectedIndexChanged(object sender EventArgs e) Response Write( DropDownList控件选择改变!<br> ); protected void TextBox _TextChanged(object sender EventArgs e) Response Write( TextBox文本改变!<br> );
如果控件本身的AutoPostBack设置为false(默认是false)时 文本框和下拉框发生
改变时 不会执行change事件的 而是将事件信息缓存在客户端
当在页面上点击一个服务器端控件Button protected void Button _Click(object sender System EventArgs e) Response Write( 点击了Button按钮!<br> );
此时将客户端中的事件信息发送到服务器端 执行所有的事件 返回到客户端的信息为
TextBox文本改变!
DropDownList控件选择改变!
cha138/Article/program/net/201311/12713相关参考
ASP.NET控件开发基础之复合控件事件处理浅析 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
知识大全 ASP.NET入门教程 10.3.3 事件处理程序/函数
ASP.NET入门教程10.3.3事件处理程序/函数 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
ASP.NET学习笔记之事件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一事件的运行原理&n
ASP.NET中的事务处理和异常处理 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 使用SQLTr
ASP.NET页面事件执行顺序 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! usingSyst
ASP.NET中的错误处理支持 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! ASPNET具有一
关于ASP.Net中的时间处理 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!在ASPNet中M$为
Asp.net用户控件添加自定义事件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &n
ASP.Net之C#中的异常处理 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 基础知识 程序
如何用在ASP.NET中写入事件日志 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 本文包含有关