Asp.net基础概念之 事件

.NET Framework中的事件

 

事件体系结构

引发事件的对象叫做事件源。事件源发布它可以引发的事件。事件的类型总是委托类型,这个委托类型的签名定义了处理该事件的方法的签名。定义事件处理程序方法的对象称为事件接收方。事件接收方预订要在事件源上处理的事件事件接收方提供的事件处理程序方法必须与为该事件预订的方法签名一致。事件源利用多播委托跟踪这些事件处理程序方法。当发生重要情况时,事件源引发事件,当事件引发后,事件源自动利用它的金手委托调用在每个事件接收方上指定的事件处理程序方法。

 

事件和委托的关系

一个事件(Event)是一个对象发送的一个消息,用来表示一个动作发生了。而一个动作可以被用户操作或者其他程序所触发。触发事件的对象被事件发送者(Event Sender)调用:捕获处理事件的对象被事件接收者(Event Receiver)调用。

在事件通信中,事件的发送者不知道哪个对象或者方法将要去接收/处理发送过去的事件。因而在事件源和事件接收者之间就需要一个中间人存在,这个中间人就叫委托。

在使用事件的有效范围里,委托提供一种机制,在事件引发时为类指示要调用的方法。当事件引发时,使用委托作为被调用方法的指针,修改事件的类就不需要了解作为观测程序的类的任何信息。

 

定义事件

在连接事件和其处理程序方法之前,需要定义一个其他对象关心的事件。用event关键字和指示方法签名的委托对象来定义事件,这个事件的所有事件处理程序都得遵循该委托对象指示的方法签名。

 

public event EventHandler Click;

 

根据约定,引发事件的行为在OnEventName方法中发生。

 

        public void OnClick(EventArgs e)
ExpandedBlockStart.gifContractedBlock.gif        
{
            
// 如果为事件注册了处理程序则引发该程序
            if (Click != null)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
{
                Click(
this, e);
            }

        }

先进行检查,以确定存在事件,否则值为null。接着像调用方法一样调用事件来引发它,把对控件或类的this传递给它,指示它作为事件的发送者,把一个EventArgs类的新实例作为第二个参数。

 

使用事件

声明了事件和它相应的委托之后,希望对事件作出响应的对象就必须为这个事件添加一个事件处理程序。事件处理程序是一个方法,它的签名和与事件关联的委托相匹配,当事件引发的时候被调用。 

 

Object.EventName += new DelegateType(EventHandlerMethod);

 

    注意:当指派多个处理程序给一个事件的时候,处理程序的调用次序是没有保证的。因此不要指望处理程序会以一个特定次序出现。

 

EventHandlerEventArgs

EventHandler.NET Framework中预定了一个用于事件的委托,它有两个参数:object类型参数以及System.EventArgs类型的参数。Object对象代表了事件发送者,EventArgs对象代表了事件包含的事件数据。

其实所有的事件处理方法都只有这两个参数,惟一不同的是,其他的某些事件处理方法的第二个参数会是System.EventArgs的一个子类,用于自定义一些我们需要的事件参数。

   

 

ASP.NET事件模型

ASP.NET的事件驱动是一种基于HTTP协议的技术,在ASP.NET中事件的触发和事件的处理是分别在客户端和服务器端进行的。一个事件在客户端被触发之后,会通过HTTP协议以POST的方式发送到服务器端,而服务器端则通过ASP.NET页面架构来进行相应的处理和反馈。

 

缓存事件
   
ASP.NET Framework提供给服务器端事件不是很多,因为事件驱动模型机制的实现是在客户端和服务器端分别实现的,之间需要通过HTTP协议方式来传递事件信息,因而如果频繁地触发各类事件会对整个Web站点产生很大的流量压力(如OnMouseOver事件)。但是,有些事件虽然也会频繁的触发但是必须提供(如Change事件),对于这种情况,ASP.NET Framework提供了一个折衷的办法,就是对于这类事件在触发时,不是立即将事件信息发送到服务器,而是缓存在客户端,等到再一次的事件信息被发送到服务器端时一同发送回去。因此,当这些缓存着的事件以及刚刚被触发的事件在服务器端被接收时,ASP.NET Framework不会按照特定的顺序去解释执行处理这些事件。

 

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;

ExpandedBlockStart.gifContractedBlock.gif
/// <summary>
/// 说明:事件被缓存的示例
/// 作者:文野
/// 联系:stwyhm.cnblogs.com
/// </summary>

public partial class CacheEvent : System.Web.UI.Page
ExpandedBlockStart.gifContractedBlock.gif
{
    
protected void Page_Load(object sender, EventArgs e)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
{

    }

    
ExpandedSubBlockStart.gifContractedSubBlock.gif    
/// <summary>
    
/// 说明:文本框的TextChanged事件,不会自动引发页面Postback
    
/// </summary>
    
/// <param name="sender"></param>
    
/// <param name="e"></param>

    protected void TextBox1_TextChanged(object sender, EventArgs e)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
{
        Response.Write(
"引发了文本框的TextChanged事件。<br />");
    }


ExpandedSubBlockStart.gifContractedSubBlock.gif    
/// <summary>
    
/// 说明:下拉框的SelectedIndexChanged事件,不会自动引发页面Postback
    
/// </summary>
    
/// <param name="sender"></param>
    
/// <param name="e"></param>

    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
{
        Response.Write(
"引发了下拉框SelectedIndexChanged事件。<br />");
    }


ExpandedSubBlockStart.gifContractedSubBlock.gif    
/// <summary>
    
/// 说明:按钮的Click事件,引发页面Postback
    
/// </summary>
    
/// <param name="sender"></param>
    
/// <param name="e"></param>

    protected void Button1_Click(object sender, EventArgs e)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
{
        Response.Write(
"引发了按钮的Click事件。<br />");
    }

}

 
    由上面的示例我们看到,当按钮事件引发Postback时同时被缓存的另两个事件也运行了。

转载于:https://www.cnblogs.com/Little-Li/archive/2010/07/16/1779125.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/549185.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

synchronized同步方法概述

synchronized同步方法 1、“线程安全”与“非线程安全”&#xff1a; 非线程安全情况&#xff1a;多个线程对同一个对象中的实例变量进行并发访问时&#xff0c;产生脏读。 解决方法&#xff1a;对实例变量的值进行同步处理。 2、方法内的变量为线程安全 3、实例变量非线程安…

as3:sprite作为容器使用时,最好不要指定width,height

官方解释&#xff1a; 除 TextField 和 Video 对象以外&#xff0c;没有内容的显示对象&#xff08;如一个空的 Sprite&#xff09;的高度为 0&#xff0c;即使您尝试将 height 设置为其它值&#xff0c;也是这样。 如果您设置了 height 属性&#xff0c;则 scaleY 属性会相应调…

1002 写出这个数 (20分)-Java

题目 读入一个正整数 n&#xff0c;计算其各位数字之和&#xff0c;用汉语拼音写出和的每一位数字。 输入格式&#xff1a; 每个测试输入包含 1 个测试用例&#xff0c;即给出自然数 n 的值。这里保证 n 小于 10 ​100。 输出格式&#xff1a; 在一行内输出 n 的各位数字之和…

成为LINUX系统管理员几点规则

要成为一名合格的LINUX管理员&#xff0c;一般来说都要懂得如下几点规则&#xff1a; 规则1&#xff1a;了解LINUX的一切。首先&#xff0c;在了解以下规则之前&#xff0c;笔者必须向大家说明的是&#xff0c;即使最基本的LINUX系统管理员都是要经过不断的学习和长时间实践才能…

Facebook图片存储架构技术全解析

Haystack提出了一种通用的基于HTTP的对象存储&#xff0c;它含有指针&#xff0c;映射到存储对象。在Haystack中以指针储存照片&#xff0c;把数以十万计的图像聚集到一个Haystack存储文件&#xff0c;从而消除了元数据负荷。这就使得元数据的开销非常小&#xff0c;并且使我们…

Shiro授权流程图

Shiro授权流程Shiro授权流程图Shiro授权流程图 根据Shiro授权流程&#xff0c;绘制流程图如下&#xff1a;

assert

[编辑本段]概述  Assert - 断言 编写代码时&#xff0c;我们总是会做出一些假设&#xff0c;断言就是用于在代码中捕捉这些假设&#xff0c;可以将断言看作是异常处理的一种高级形式。断言表示为一些布尔表达式&#xff0c;程序员相信在程序中的某个特定点该表达式值为真。可…

Shiro并发登录人数控制遇到的问题和解决

shiro并发登录人数控制遇到的问题和解决问题1:KickoutSessionControlFilter不起作用问题2:KickoutSessionControlFilter中cache为null空指针异常问题3:服务器重启后首页访问&#xff1a;subject.getPrincipal()报ClassCastException异常系统环境参考资料问题1:KickoutSessionCo…

新的网站上线 linux视野

开通了新的网站www.linuxsight.com会一直专注着Linux文章的写作转载于:https://blog.51cto.com/87243/354662

js中toFixed方法的两个坑

js中toFixed方法的两个坑toFixed返回结果是string&#xff0c;后续使用它计算会错误toFixed返回结果可能出现负零-0.00toFixed返回结果是string&#xff0c;后续使用它计算会错误 代码演示&#xff1a; 类型判断代码示例&#xff1a; var stringNum (100.101).toFixed(2); v…

Redhat linux 5.3 基于bond的heartbeat

一、设置bond 1.修改网卡cd /etc/sysconfig/network-scripts/cp ifcfg-eth0 ifcfg-bond0vi ifcfg-bond0DEVICEbond0 ONBOOTyes BOOTPROTOnone IPADDR192.168.1.200 NETMASK255.255.255.0 GATEWAY192.168.1.1 USERCTLno TYPEEthernetvi ifcfg-eth0DEVICEeth0 ONBOOTyes BOOTPROT…

外挂:一个很杯具的关键字

在网页挂马泛滥的时代&#xff0c;盗号***不缺少传播到用户电脑的通道&#xff0c;因为只需要找一些与游戏有关的网站&#xff0c;或者在流量大的网站把网马一挂&#xff0c;就不愁钓不着鱼。如今&#xff0c;时代在变迁&#xff0c;安全软件已经成功的解决了网页挂马这个难题&…

java.lang.ClassNotFoundException: retrofit2.Retrofit$Builder解决思路

ClassNotFoundException报错具体问题报错详情推测可能是jar包问题问题总结自定义依赖缺少依赖jar具体问题 Caused by: java.lang.NoClassDefFoundError: retrofit2/converter/simplexml/SimpleXmlConverterFactory报错详情 org.springframework.web.util.NestedServletExcept…

varnish排错

●Troubleshooting varnish&#xff08;varnish排错&#xff09;<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />有时候varnish会出错&#xff0c;为了使您知道该检查哪里&#xff0c;您可以检查varnishlog&#xff0c;/var/log…

图像质量评估方法——结构相似性指数(SSIM)

结构相似性指数&#xff08;SSIM&#xff09;是一种全参考图像质量评估方法&#xff0c;用于比较两幅图像的相似性。 SSIM的计算涉及到亮度&#xff08;Luminance&#xff09;、对比度&#xff08;Contrast&#xff09;和结构&#xff08;Structure&#xff09;三个方面的相似性…

OpenSSL加密与证书

加密 身份的验证 &#xff08;非对称加密&#xff09;数据的加密 &#xff08;对称加密&#xff09;数据的完整性 &#xff08;单向加密&#xff09;三者的联合使用会保证数据的安全机制 A&#xff1a;发送者 B&#xff1a;接收方 A的操作&#xff1a; A使用…

asp 正则表达式

这里用的是正则式Set objRegExp New Regexp 建立对象objRegExp.IgnoreCase True 大小写忽略objRegExp.Global True 全局为真objRegExp.Pattern "http://.?" 匹配字段set mmobjRegExp.Execute(str) 执行查找&#xff0c;str为输入参数For Eac…

SQL SERVER重置自动编号列(标识列)

为什么80%的码农都做不了架构师&#xff1f;>>> 两种方法&#xff1a; 一种是用Truncate TRUNCATE TABLE name 可以删除表内所有值并重置标识值 二是用DBCC CHECKIDENT DBCC CHECKIDENT (table_name, RESEED, new_reseed_value) 如dbcc checkident ("bc_pos&q…

VBScript:登录脚本

今日与一些朋友调侃起各自的部门名称&#xff0c;有的IT部已经被用户公认为“挨踢”部&#xff0c;甚至有的IT部的分机号码都已被设置为119, 不知有多少ITPro被沦落为“救火员”&#xff0c;成就了传说中的“挨踢”&#xff0c; 业务与IT部门之间的哪些微秒之外到底在哪里&…

WebService生成客户端代理的工具WSDL参数介绍

wsdl.exe使用 ASP.NET&#xff0c;根据 WSDL 协定文件、XSD 架构和 .disc 发现文档&#xff0c;为 Xml Web Services 客户端和 Xml Web Ser 代码的实用工具。此工具可以与 disco.exe 一起使用。wsdl.exe <选项> <URL 或路径> <URL 或路径>选项 <URL 或路径…