ASP.NET用户控件事件的定义和实践

原创 2007年09月17日 15:36:00

假定用户控件(UserControl.ascx)中包含按钮控件AButton,希望实现按Button按钮时,包含该用户控件的页面可以接收到事件。

UserControl.ascx.cs中的处理:
1. 定义public的事件委托,如ClickEventHandler;
2. 在UserControl类中声明事件,如Click;
3. 在UserControl类中定义引发事件的方法,如OnClick()方法;
4. 在UserControl类的相关方法中调用引发事件的方法,如在Button_Click()中调用OnClick()。

 下面这个例子是简单的响应点击事件

demo:buttonlist.aspx.cs

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 stoneControls
{
    public delegate void ClickEventHandler(object sender, EventArgs e);
    public partial class buttonList : System.Web.UI.UserControl
    {
        public event ClickEventHandler Click;
        protected void OnClick(EventArgs e)
        {
            if (Click != null)
                Click(this, e);
        }

        protected void lbnHome_OnClick(object sender, EventArgs e)
        {
            this.OnClick(e);
        }
    }
}

demo:buttonlist.aspx

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="buttonList.ascx.cs" Inherits="stoneControls.buttonList" %>
<table>
<tr>
   <td><asp:LinkButton ID="lbnHome" runat="Server" CommandName="HOME" Text="首页" OnClick="lbnHome_OnClick"></asp:LinkButton></td>
  </tr>
</table>

使用ascx控件

sample:buutonListTest .aspx

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>无标题页</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <uc1:buttonList ID="ButtonList1" runat="server" OnClientClick="myclick"/>   
    </div>
    </form>
</body>
</html>

sample:buutonListTest .aspx.cs

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 stoneControls
{
    public partial class buutonListTest : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            this.ButtonList1.Click+=new ClickEventHandler(ButtonList1_Click);
        }

        protected void ButtonList1_Click(object sender, EventArgs e)
        {

            Response.Write("AAAAAAAAAAAAAAAAAAAAAA");
        }
    }
}

     我们进一步的构造一个带数据参数的事件,利用.net自带的commandeventargs,当然可以自己构造一个,去继承eventargs就行了。

   将上面的委托和事件改改,如下 :

       public delegate void ClickCmandHandler(object sender,CommandEventArgs e);

    public partial class buttonList : System.Web.UI.UserControl
    {
        public event ClickCmandHandler Click;
        protected void OnClick(CommandEventArgs e)
        {
            if (Click != null)
                Click(this, e);
        }

        protected void lbnHome_OnClick(object sender,CommandEventArgs e)
        {
            this.OnClick(e);
        }
    }

   页面的文件也相应做下修改:

  <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="buttonList.ascx.cs" Inherits="stoneControls.buttonList" %>
<table>
<tr>
   <td>
   <asp:LinkButton ID="lbnHome" runat="Server" CommandName="HOME" Text="首页" OnCommand="lbnHome_OnClick">
   </asp:LinkButton>  
   </td>
   <td>
   <asp:LinkButton ID="lbnChannel" runat="Server" CommandName="CHANNEL" Text="频道" OnCommand="lbnHome_OnClick">
   </asp:LinkButton>  
   </td>
   <td>
   <asp:LinkButton ID="lbnColumn" runat="Server" CommandName="COLUMN" Text="栏目" OnCommand="lbnHome_OnClick">
   </asp:LinkButton>  
   </td>
   <td>
   <asp:LinkButton ID="lbnSoft" runat="Server" CommandName="DETAILS" Text="明细" OnCommand="lbnHome_OnClick">
   </asp:LinkButton>  
   </td>
  </tr>
</table>

    调用控件改动下注册的参数就可以了。。

    protected void Page_Load(object sender, EventArgs e)
        {
            this.ButtonList1.Click+=new ClickCmandHandler(ButtonList1_Click);
        }

        protected void ButtonList1_Click(object sender,CommandEventArgs e)
        {
            if (e.CommandName == "DETAILS")
            {
            }
            if (e.CommandName == "COLUMN")
            {
            }
            if (e.CommandName == "CHANNEL")
            {
            }
            if (e.CommandName == "HOME")
            {
            }
        }

这样子一个简单的页面导航的控件基本出来,根据在commandname的不同跳转!!

Asp.net 用户控件添加自定义事件asp.net

Asp.net 用户控件添加自定义事件asp.net
  • Sunqlive
  • Sunqlive
  • 2016年09月07日 11:17
  • 941

ASP.NET中页面及用户控件的事件执行顺序

在WebForm1页面上直接放置用户控件WebUserControl1时的事件顺序: WebUserControl1_Init WebForm1_Init Page_Load WebUserC...
  • soarheaven
  • soarheaven
  • 2012年02月13日 15:10
  • 931

ASP.NET用户控件事件的定义和实践

  假定用户控件(UserControl.ascx)中包含按钮控件  AButton,希望实现按  Button  按钮时,包含该用户控件的页面可以接收到事件。UserControl.ascx.cs ...
  • lionel1982
  • lionel1982
  • 2008年12月21日 21:28
  • 412

ASP.NET用户控件操作ASPX页面(在ASPX页面捕捉用户控件的事件)

一、简单实例 先来个简单点的,首先新建一个 “web用户控件”WebUserControl1.ascx, 在页面上添加一个按钮,并响应Click事件: 然后编写后台代码: ...
  • bdstjk
  • bdstjk
  • 2012年05月18日 09:35
  • 4000

ASP.NET用户控件事件的定义和实践--C#里的委托和事件实现Observer

一、委托的简介 1、委托的声明:                delegate HandlerName ([parameters]) 例如:               public deleg...
  • stonezhuzisgu
  • stonezhuzisgu
  • 2007年09月18日 10:21
  • 1392

关于ASP.NET同页面内【用户控件与父页面】以及【用户控件与用户控件】之间方法调用/传值

BEGIN     首先我们需要明白一个道理,不管一个ASPX页面里面装了多少个ASCX,始终还是要生成一个页面的代码的,所以毫无疑问,我觉得在解决这个问题之前我就已经确定这个问题是可解的。直接...
  • dongbo19910728
  • dongbo19910728
  • 2013年06月06日 10:43
  • 747

ASP.NET中的用户控件和用户自定义控件

用户控件:        用户控件是用户自定义的可重用的一种控件,它的使用由HTML和Web服务器控件使用相同的技巧。开发人员能够根据程序的需要,定义和编写用户控件,开发所使用的编程技术与Web窗体编...
  • dandanzmc
  • dandanzmc
  • 2013年10月07日 17:39
  • 7832

ASP.NET用户控件事件的定义和实践-- 自定义事件数据类

 事件功能是由三个互相联系的元素提供的:提供事件数据的类、事件委托和引发事件的类。.NET Framework 具有命名与事件相关的类和方法的约定。如果想要您的类引发一个名为 EventName 的事...
  • stonezhuzisgu
  • stonezhuzisgu
  • 2007年09月18日 13:33
  • 881

asp.net页面装载用户控件时的事件顺序

 在WebForm1页面上直接放置用户控件WebUserControl1时的事件顺序:WebUserControl1_Init WebForm1_Init Page_Load WebUserContr...
  • vipxiaotian
  • vipxiaotian
  • 2007年07月13日 17:52
  • 1218

asp.net中动态加载用户控件的办法

很多网友在按钮的click事件中动态添加用户控件在页面回传后消失了或者就是用户控件中的按钮事件不能触发,下面是解决办法: (1) 首先添加一个用户控件:WebUserControl1.ascx ...
  • sweetsoft
  • sweetsoft
  • 2006年02月06日 13:22
  • 8511
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ASP.NET用户控件事件的定义和实践
举报原因:
原因补充:

(最多只允许输入30个字)