我正在尝试创建一个派生自 WebControl 的“服务器控件”。这需要完全在 C# 中完成,以便可以将其编译为 .dll。我对使用 .ascx 文件创建用户控件不感兴趣(我实际上已经有一个“用户控件”,但我想将它添加到库中,所以我正在转换它)。
我的控件现在非常简单,我无法触发按钮事件:
public class ButtonWrapper : WebControl
{
protected Button button;
public event EventHandler<Events.GenericEventArgs<Tuple<int, string>>> ButtonClicked;
public void Button_Click(object o, EventArgs e)
{
ButtonClicked(this, new Tuple<int,string)(0, "abc"));
}
public void WHERE_DO_I_PUT_THIS_CODE()
{
button = new Button()
{
ID = "button",
Text = "Button"
};
button.Click += new EventHandler(Button_Click);
}
}
我需要在哪里“创建”按钮?我目前在重载的 CreateChildControls() 中有它:
protected override void CreateChildControls()
{
this.Controls.Clear();
button = new Button()
{
ID = "button",
Text = "Button"
};
button.Click += new EventHandler(Button_Click);
this.Controls.Add(button);
this.ChildControlsCreated = true;
}
控件加载得很好,但是当我单击按钮时,页面只是刷新并且永远不会触发事件。我想让 ButtonWrapper 中的按钮触发,以便父页面可以收听。我想我已经接近了,但我缺少一些简单的东西。
编辑:当我为这个问题简化问题时,我没有正确的事件变量类型用于 EventArgs 传递等。