【问题标题】:Event handling for dynamically generated controls动态生成控件的事件处理
【发布时间】:2011-11-14 17:35:37
【问题描述】:

我正在开发一个模块,我基本上使用 XSLT 动态生成页面上的所有控件。它们正在被渲染并添加到正确的标记中。这里的问题是我想为这个动态生成的控件编写事件处理,我不知道如何实现,因为在完美的开发环境中,我们通常在 aspx 页面上双击我们的控件,.NET 会为你创建一个相关的事件在 aspx.cs 页面的后面。

有什么想法吗?

【问题讨论】:

  • 黑客手法:查看自动生成的代码文件,复制它的作用。

标签: c# asp.net xslt


【解决方案1】:

动态添加的控件通常不会在回发后继续存在。

再多的双击,甚至用 _selectedIndexChanged 输入控件的预期名称都不会得到你想要的。

这是假设(请让我们知道我是对还是错)您正在添加 HTML 控件,而不是动态添加 ASP.NET 控件。

【讨论】:

  • 您能从客户端想到什么?使用 JQuery 或 Javascript 的东西?
  • -1:如果您在 Page Init 中生成动态生成的控件,它们可以很好地回传。
  • 我没有想到的好点。如果您可以更新您的答案以反映这种可能性,我可以反转 -1。
【解决方案2】:

您需要使用适当的处理程序创建一个方法,并在创建它们时将其连接到您动态创建的控件。

protected void MyHandler(object sender, EventArgs e)
{
    //Do some stuff
}

当你创建你的控件时

LinkButton lb = new LinkButton();
    lb.ID = "lbexample";
    lb.Click += MyHandler;
Page.Form.Controls.Add(lb);

但是非常重要的是,在您的回发时,您要按原样重建这些控件,否则事件将不会触发。您需要首先重新创建控件,以便可以引发事件,因此您需要创建控件的任何数据都必须使用您熟悉的任何状态机制在回发时可用。

【讨论】:

  • 我认为我们正在查看类似 Delegates 的内容。那挺好的。实际上,这就是我想考虑的第二个选择,因为它仍然是服务器端。我在客户端遇到了一些非常酷的东西。 JQuery 有这个很棒的功能:api.jquery.com/click。你怎么看?
【解决方案3】:

如果要执行客户端事件,可以通过添加适当的属性来指定要触发的方法的名称(或代码本身)。

例如,如果您想在用户单击动态生成的复选框时触发myCheckBox_OnClick,您可以执行以下操作:

myDynamicallyGeneratedControl.Attributes.Add("onclick", "myCheckBox_OnClick");

您还可以生成要执行的javascript代码,并通过页面的ClientScript.RegisterStartupScript方法将其添加到页面中。

【讨论】:

  • “myDynamicallyGeneratedControl”的类型是什么?
  • 我的回复假定您正在生成 ASP.Net 控件。在我的回答中,控件的类型为 System.Web.UI.WebControls.CheckBox。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多