首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 网页设计 | 平面设计 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
中国IT实验室Dotnet频道
中国IT教育
Google
首页 ASP.NET  C#  XML/WebService ADO.NET VC.NET VB.NET .NET 资讯动态 专题 RSS订阅 讨论 下载
您现在的位置: 中国IT实验室 >> Dotnet >> ASP.NET >> 正文

ASP.NET中的事件处理

        一、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">标识之后)发送脚本块。

        如:

                 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"));
                    }
                        }

        2、客户端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.Button1.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 DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
        {
        }

[1] [2] [3] 下一页

【责编:michael】

中国IT教育

相关产品和培训
文章评论
 友情推荐链接
 认证培训
 专题推荐

 ·WEB程序开发--ASP.NET和PHP、JSP究竟学哪个?
 ·五步带你入门XML
 ·关于Java框架技术专题
 ·XML全攻略技术专题
 ·JAVA开源技术介绍专题
 ·Java嵌入式开发之J2ME技术专题
 ·超前体验 Oracle 11g的5个新特性…
 ·揭密使用VB.NET的五个实用技巧
 ·Oracle和SQL Server常用函数对比专题…
 ·展现C#世界 C#程序设计专题…
 今日更新
 社区讨论
 博客论点
 频道精选
 Dotnet频道相关导航