我一直在网上寻找一些关于该主题的文章,但我仍然无法弄清楚它们之间的区别。我有下面显示的代码,如果我从 CompositeControl 继承它可以完美地工作,但如果我从 WebControl 继承则不能。(它们都呈现代码,但只有 CompositeControl 处理事件)
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace TestLibrary
{
public class TemplateControl : CompositeControl
{
TextBox txtName = new TextBox();
TextBox txtEmail = new TextBox();
Button btnSend = new Button();
private void SetValues()
{
btnSend.Text = "Skicka";
}
protected override void CreateChildControls()
{
SetValues();
this.Controls.Add(new LiteralControl("Namn: "));
this.Controls.Add(txtName);
this.Controls.Add(new LiteralControl("<br />"));
this.Controls.Add(new LiteralControl("Email: "));
this.Controls.Add(txtEmail);
this.Controls.Add(new LiteralControl("<br />"));
btnSend.Command += new CommandEventHandler(btnSend_Command);
this.Controls.Add(btnSend);
}
void btnSend_Command(object sender, CommandEventArgs e)
{
this.Page.Response.Write("Du har nu klickat på skicka-knappen! <br /><br />");
}
}
}
因此,当我单击按钮并将控件呈现为 WebControl 时,什么也没有发生。但是,如果我将 WebControl 更改为 CompositeControl,则会打印出文本。为什么?WebControl 和 CompositeControl 有什么区别?