知识大全 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控件开发基础之复合控件事件处理浅析

ASP.NET控件开发基础之复合控件事件处理浅析  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 ASP.NET入门教程 10.3.3 事件处理程序/函数

ASP.NET入门教程10.3.3事件处理程序/函数  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 ASP.NET学习笔记之事件

ASP.NET学习笔记之事件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一事件的运行原理&n

知识大全 ASP.NET中的事务处理和异常处理

ASP.NET中的事务处理和异常处理  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 使用SQLTr

知识大全 ASP.NET页面事件执行顺序

ASP.NET页面事件执行顺序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  usingSyst

知识大全 ASP.NET中的错误处理支持

ASP.NET中的错误处理支持  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  ASPNET具有一

知识大全 关于ASP.Net中的时间处理

关于ASP.Net中的时间处理  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!在ASPNet中M$为

知识大全 Asp.net 用户控件添加自定义事件

Asp.net用户控件添加自定义事件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &n

知识大全 ASP.Net之C#中的异常处理

ASP.Net之C#中的异常处理  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  基础知识  程序

知识大全 如何用在ASP.NET中写入事件日志

如何用在ASP.NET中写入事件日志  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  本文包含有关