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

自定义类中的asp c#动态按钮事件,c#,asp.net,button,C#,Asp.net,Button,我正在自定义类中创建一个动态按钮,在.aspx codebeahind之外。自定义类创建一个表对象,并在该表中生成一列按钮。生成后,表将加载到占位符控件中。除了这个问题外,一切正常: 如何在自定义类中以编程方式为Button对象分配“单击”事件 MyButton.Click += new EventHandler(MyButtonClick); 这将导致:“名称“MyButtonClick”在当前上下文中不存在”错误 我知道它在当前上下文中不存在,但一旦呈现了aspx页面,codebehin

我正在自定义类中创建一个动态按钮,在.aspx codebeahind之外。自定义类创建一个表对象,并在该表中生成一列按钮。生成后,表将加载到占位符控件中。除了这个问题外,一切正常:

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

 MyButton.Click += new EventHandler(MyButtonClick);
这将导致:“名称“MyButtonClick”在当前上下文中不存在”错误


我知道它在当前上下文中不存在,但一旦呈现了aspx页面,codebehind将包含一个处理“MyButtonClick”的方法。我不知道如何将单击事件方法名称存储到自定义类的Button对象中,并将其传递给要呈现的aspx codebehind。

您必须在自定义控件中定义事件。单击按钮时触发该事件,以便.aspx可以处理它

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

控制代码隐藏:

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

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

}

protected void whatever_ButtonEvent()
{
    //do something
}
.ASPX代码隐藏:

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

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

}

protected void whatever_ButtonEvent()
{
    //do something
}

必须在自定义控件中定义事件。单击按钮时触发该事件,以便.aspx可以处理它

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

控制代码隐藏:

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

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

}

protected void whatever_ButtonEvent()
{
    //do something
}
.ASPX代码隐藏:

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

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

}

protected void whatever_ButtonEvent()
{
    //do something
}

让我们把这个概念应用到一个有文本框和两个按钮的用户控件上。用户控件放置在Gridview中。当代码运行时,事件处理程序中的方法始终为null。我认为必须这样做,因为a按钮位于gridview中的用户控件中

这是我的用户控制代码

公共部分类用户\u控件\u GridViewFilter:System.Web.UI.UserControl {

}

我在aspx页面上注册控件

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

让我们把这个概念应用到一个有文本框和两个按钮的用户控件上。用户控件放置在Gridview中。当代码运行时,事件处理程序中的方法始终为null。我认为必须这样做,因为a按钮位于gridview中的用户控件中

这是我的用户控制代码

公共部分类用户\u控件\u GridViewFilter:System.Web.UI.UserControl {

}

我在aspx页面上注册控件

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

你说的自定义类是指自定义控件吗?不,只是一个自定义类,如:带有属性、方法等的公共类DataSetTableRenderer{}。你说的自定义类是指自定义控件吗?不,只是一个自定义类,如:带有属性、方法等的公共类DataSetTableRenderer{}。。。