【发布时间】:2010-11-10 15:07:31
【问题描述】:
大家早上好。
我有一个与控件和事件处理有关的问题。假设我想创建一个LinkButton。
protected void loadLinkButton()
{
ContentPlaceHolder content = (ContentPlaceHolder)this.Master.FindControl("MainContent");
LinkButton lnk = new LinkButton();
lnk.ID = "lnikBtn";
lnk.Text = "LinkButton";
lnk.Click += new System.EventHandler(lnk_Click);
content.Controls.Add(lnk);
}
这是事件处理程序:
protected void lnk_Click(object sender, EventArgs e)
{
Label1.Text = "ok!";
}
如果我在Page_Load 中运行loadLinkButton 函数,一切正常。但是当我尝试通过单击简单按钮运行loadLinkButton 时,会创建链接按钮但未处理事件。
protected void Button1_Click(object sender, EventArgs e)
{
loadLinkButton();
}
我有什么办法解决吗?或者 loadLinkButton 必须始终在 Page_Load、Page_init 等上重新生成。
【问题讨论】:
-
这段代码绝对没有动态。我有点失望,回答这个问题的人鼓励使用这个术语。
-
@Aaronaught - 你会怎么称呼它?以编程方式添加控件长期以来一直被称为动态添加控件。您访问的几乎所有论坛、用户组或博客都会使用相同的术语...
-
@Josh:早就错误地这么称呼它了,是的。我不讨厌 OP 感到困惑,但高声誉的回答者不应该重复这个词。 “动态”这个词只有在与 static(即动态链接库,dynamic typing)或引用ASP.NET Dynamic Data 对比时才有意义。这个问题是指在 design time 与 runtime 创建的控件之间的区别,正如我在编辑中指出的那样。
-
@Aaronaught - 我理解这个论点的学术方面,但是关于运行时完成的事情,许多不同语言和平台的从业者已经采用了一个通用的命名法。当你说“动态添加”或“动态控件”时,每100个人中就有99人会明白你的意思。真的不重要了。就像有人说“酷!”一样。他们通常不谈论温度。
-
@Josh:我完全理解英语本身并不是学术规定的正式语言,但计算机语言和框架实际上是由规范正式定义的,一个词确实不正确,因为很多人滥用它(例如Agile)。在 this 情况下保持正确尤为重要,因为“动态”这个词在 C# 中已经意味着不同,而这正是
[dynamic]标记应该用于的用途.