aspx:
<form runat=server>
<yourPrefix:YourTagName id="wuc1" runat=server />
...
</form>
code behind:protected DelegateTest.WebUserControl1 wuc1;private void InitializeComponent()
{
...
wuc1.ButtonClick += new DelegateTest.ButtonClickEventHandler(testmethod);
}
<form runat=server>
<yourPrefix:YourTagName id="wuc1" runat=server />
...
</form>
code behind:protected DelegateTest.WebUserControl1 wuc1;private void InitializeComponent()
{
...
wuc1.ButtonClick += new DelegateTest.ButtonClickEventHandler(testmethod);
}
解决方案 »
- 在VS2005环境下asp.net中连接数据库问题
- 非哥,下面的能用repeater实现么?
- ASP.NET初级小问题 <%=url%>的用法。
- iis5.1和iis6.0中匿名用户帐户是什么
- |zyciis| 200分求: 一个ASP银行接口,我现在的是ASP.NET的 在ASP.NET中要怎么做 没有用过ASP 谢谢 急
- 我要对一段比较长的文字(中文)加密,请问有没有较好的解决方案呢?
- 试用于教学的oa系统数据流怎么写怎么样? 小弟作毕设 哥哥姐姐帮帮忙
- 求助:为什么不弹出confirm呢???谢谢
- 求救!!!自动编号!!
- 璇烽棶濡備綍浣跨敤javascript鍔ㄦ€佹坊鍔燾heckboxlist涓€夐」
- 亿万火及
- 在datagrid中响应ItemCommand事件的问题
在页面上加上wuc1.ButtonClick += new DelegateTest.ButtonClickEventHandler(testmethod);
只有加挂了事件ButtonClick得值才不为空。
另外你的整个web项目必须编译过去才能保证这个事件正确运行。
这样是达不到预想效果的。
1.你的自定义控件要实现IPostBackEventHandler接口。这个很简单
2.在自定义控件的客户总端代码中,应使用Page.GetPostBackEventReference(this)生成的客户端的代码作为提交的方法参考一下这篇文章
http://www.up2soho.com/csharp/showart.asp?art_id=80&cat_id=2
===================================================================
控件中的主要代码
===================================================================
//web用户控件上有一服务器端控件Button1
protected System.Web.UI.WebControls.Button Button1;
//delegate 声明定义一种引用类型
public delegate void ButtonClickEventHandler(object sender,System.EventArgs e);
//指定一个事件
public event ButtonClickEventHandler ButtonClick;
//指定委托代理
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
this.Button1.Click+=new System.EventHandler(testMethod);
}
//事件处理
private void testMethod(object sender,System.EventArgs e)
{
if(ButtonClick!=null)
ButtonClick(sender,e);
}=============================================================================
引用上面所定义控件的一个WEB页面
=============================================================================
--------------------
客户端代码:
--------------------
<form id="Form1" method="post" runat="server">
<uc1:WebUserControl1 id="WebUserControl11" runat="server"></uc1:WebUserControl1>
</form>
---------------------------
服务器端代码:(BehindCode)
---------------------------
//创建一用户控件的实例
protected DelegateTest.WebUserControl1 wuc1=new WebUserControl1();
//指定委托代理
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
wuc1.ButtonClick += new DelegateTest.ButtonClickEventHandler(testmethod);
}
//testmethod方法
private void testmethod(object sender, System.EventArgs e)
{
Response.Write("<script>alert('OK');</script>");
}=================================================================================
运行---
点击WEB页面上的用户控件wuc1的子控件(Button1),并不能触发testmethod方法,我跟了一下代码,结果表明:
用户控件的以下代码
private void testMethod(object sender,System.EventArgs e)
{
if(ButtonClick!=null)
ButtonClick(sender,e);
}
中的ButtonClick的值为null
=================================================================================
这是什么原因呀,还请各位大哥不吝赐教,小弟在这儿谢啦!
1:public delegate void ButtonClickEventHandler(object sender,System.EventArgs e);
//指定一个事件
private event ButtonClickEventHandler _ButtonClick;
/// <summary>
/// 定义要暴露的ButtonClick事件
/// </summary>
public ObjectEvent PageButtonClick
{
get
{
return _ButtonClick;
}
set
{
_ButtonClick= value;
}
}
//事件处理
private void testMethod(object sender,System.EventArgs e)
{
_ButtonClick(sender,e);
}
2:
在引用控件的页面的Page_Load中
//代理事件
WebUserControl11.ButtonClick = new ObjectEvent(this.testmethod);/// <summary>
/// 代理出来事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void testmethod(System.Object sender, System.EventArgs e)
{
//你所需要代理出来的事件代码
}
Public Class dd
Inherits System.Web.UI.UserControl
Public WithEvents Button1 As System.Web.UI.WebControls.Button
end class在引用页:
menu 为用户控件的ID
init()事件
Dim bt As Button = Menu.Btn
AddHandler bt.Click, AddressOf me_click声明 me_click 事件:
Private Sub me_click(ByVal s As Object, ByVal e As EventArgs)
End Sub
===>
protected DelegateTest.WebUserControl1 wuc1;the instance is already created on the page!!
here are my testing code:1. DelegateTest.ascx:<%@ Control Language="c#" AutoEventWireup="false" Codebehind="DelegateTest.ascx.cs" Inherits="DelegateTest.WebUserControl1" %>
<asp:Button id="Button1" Text="Button" runat="server"></asp:Button>2. DelegateTest.ascx.cs:
namespace DelegateTest
{
using System;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls; public delegate void ButtonClickEventHandler(object sender,System.EventArgs e); public abstract class WebUserControl1 : System.Web.UI.UserControl
{
protected System.Web.UI.WebControls.Button Button1; public event ButtonClickEventHandler ButtonClick;
private void Page_Load(object sender, System.EventArgs e)
{
} #region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
InitializeComponent();
base.OnInit(e);
}
private void InitializeComponent()
{
this.Button1.Click += new System.EventHandler(this.testmethod);
this.Load += new System.EventHandler(this.Page_Load); }
#endregion private void testmethod(object sender, System.EventArgs e)
{
if(ButtonClick!=null)
ButtonClick(sender,e);
}
}
}
3. TestDelegate.aspx:<%@ Register TagPrefix="uc1" TagName="WebUserControl1" Src="DelegateTest.ascx" %>
<%@ Page language="c#" Codebehind="TestDelegate.aspx.cs" AutoEventWireup="false" Inherits="WebApplication7.TestDelegate" %>
<form id="TestDelegate" method="post" runat="server">
<uc1:WebUserControl1 id="wuc1" runat="server"></uc1:WebUserControl1>
</form>
4. TestDelegate.aspx.cs:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;namespace WebApplication7
{
public class TestDelegate : System.Web.UI.Page
{
protected DelegateTest.WebUserControl1 wuc1;
private void Page_Load(object sender, System.EventArgs e)
{
} #region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
InitializeComponent();
base.OnInit(e);
}
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
wuc1.ButtonClick += new DelegateTest.ButtonClickEventHandler(testmethod); }
#endregion private void testmethod(object sender, System.EventArgs e)
{
Response.Write("<script>alert('OK');</script>");
}
}
}
private void testMethod(object sender,System.EventArgs e)
{
ButtonClick(sender,e);
}
那个event始终没有实例化.(==null)
原因可能是因为那个类是abstract class.我也一直很奇怪,不知为何这样.
试着这样,你可能只是想暴露button的click事件,可不可以暴露这个button.
public Button btnYourButtomn;