asp c#自定义类中的动态按钮事件
问题描述:
我在.aspx代码隐藏之外的自定义类中创建了一个动态按钮。自定义类创建一个Table对象并在该表中生成一列Button。一旦生成,表被加载到一个占位符控件。除了这个问题,一切都运行良好:asp c#自定义类中的动态按钮事件
如何以编程方式为自定义类中的“点击”事件分配Button对象?
MyButton.Click += new EventHandler(MyButtonClick);
这会导致:'名称'MyButtonClick'在当前上下文中不存在'错误。
我知道它在当前上下文中不存在,但是一旦呈现aspx页面,代码隐藏将包含一个处理'MyButtonClick'的方法。我不知道如何将Click事件方法名称存储在自定义类的Button对象中,并将其传递给要呈现的aspx代码隐藏。
答
您必须在自定义控件中定义一个事件。点击按钮点击事件以便您的.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);
通过自定义类你是指自定义控件吗? – JustLoren 2009-10-01 18:10:56
不,只是像这样的自定义类: 公共类DataSetTableRenderer {} 与属性,方法等... – Paulj 2009-10-01 18:54:49