asp c#自定义类中的动态按钮事件

问题描述:

我在.aspx代码隐藏之外的自定义类中创建了一个动态按钮。自定义类创建一个Table对象并在该表中生成一列Button。一旦生成,表被加载到一个占位符控件。除了这个问题,一切都运行良好:asp c#自定义类中的动态按钮事件

如何以编程方式为自定义类中的“点击”事件分配Button对象?

MyButton.Click += new EventHandler(MyButtonClick); 

这会导致:'名称'MyButtonClick'在当前上下文中不存在'错误。

我知道它在当前上下文中不存在,但是一旦呈现aspx页面,代码隐藏将包含一个处理'MyButtonClick'的方法。我不知道如何将Click事件方法名称存储在自定义类的Button对象中,并将其传递给要呈现的aspx代码隐藏。

+0

通过自定义类你是指自定义控件吗? – JustLoren 2009-10-01 18:10:56

+0

不,只是像这样的自定义类: 公共类DataSetTableRenderer {} 与属性,方法等... – Paulj 2009-10-01 18:54:49

您必须在自定义控件中定义一个事件。点击按钮点击事件以便您的.aspx可以处理它。

编辑:相同的原则适用于自定义类。

器代码背后:

public delegate void ButtonEventHandler(); 
public event ButtonEventHandler ButtonEvent; 

protected void Button1_Click(object sender, EventArgs e) 
{ 
    ButtonEvent(); 
} 

.ASPX代码背后:

protected override void OnInit(System.EventArgs e) 
{    
    control1.ButtonEvent+= 
       new Control1.ButtonEventHandler (whatever_ButtonEvent); 

} 

protected void whatever_ButtonEvent() 
{ 
    //do something 
} 

让我们这个概念,并将其应用到具有一个文本框和两个按钮的用户控件。用户控件放置在GridView中。当我的代码运行时,我的事件处理程序方法中的方法始终为空。我认为必须做的事实是,一个按钮位于gridview中的用户控件中。

这是我的用户控制代码。

公共部分类User_Controls_GridViewFilter:System.Web.UI.UserControl {

public event EventHandler UserControlButtonClicked; 

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     renderPage(); 
    } 
} 



private void OnUserControlButtonClick() 
{ 
    if (UserControlButtonClicked != null) 
    { 
     UserControlButtonClicked(); 
    } 
} 

protected void btnSearch_Click(object sender, EventArgs e) 
{ 
    OnUserControlButtonClick(); 
} 

protected void btnReset_Click(object sender, EventArgs e) 
{ 
    OnUserControlButtonClick(); 
} 

}

我注册aspx页面上的控件。

 ((User_Controls_GridViewFilter)gvMapLayer.HeaderRow.FindControl("FilterBox1")).UserControlButtonClicked 
      += new ButtonEventHandler(User_Controls_GridViewFilter_UserControlButtonClicked);