动态asp.net用户控件中的事件处理

动态asp.net用户控件中的事件处理,asp.net,events,dynamic,controls,delegates,Asp.net,Events,Dynamic,Controls,Delegates,我有一个页面,我想在其中动态添加asp.net用户控件。 场景是,我们希望在控件的特定事件上,它自行处理并在页面中加载另一个控件 我无法解决如何做到这一点 有人有什么好主意吗?Webforms或ASP.NET MVC?我假设webforms 尝试使用CompositeControl。如果涉及数据绑定,则可以使用DataBoundCompositeControl。在CreateCHildren方法中,动态创建控件并将其添加到子集合。下面是一个相当复杂的DataBoundCompositeContr

我有一个页面,我想在其中动态添加asp.net用户控件。 场景是,我们希望在控件的特定事件上,它自行处理并在页面中加载另一个控件

我无法解决如何做到这一点


有人有什么好主意吗?

Webforms或ASP.NET MVC?我假设webforms

尝试使用CompositeControl。如果涉及数据绑定,则可以使用DataBoundCompositeControl。在CreateCHildren方法中,动态创建控件并将其添加到子集合。下面是一个相当复杂的DataBoundCompositeControl示例,我曾经在内部子控件上使用事件处理创建过一次:

这实际上是一件很难纠正的事情。只需记住每次重建所有子控件并存储控件的状态,以便可以正确地重新创建所有控件


您将在回发时两次重建所有内容,并在第一次获取时重建一次。一次将控件重新创建为其以前的状态,第二次在数据绑定和事件处理后处理更改。

让我们假设这种情况:

你有一个购物车页面。 装运控件已加载。 用户单击“下一步”按钮。 --回发--

购物车页面已加载 装运控件已加载。 “单击”事件由装运控件处理。 处理装运控制。 已加载付款控件。 您可以在会话实例中存储一个变量,以确定需要加载哪个控件

在购物车页面的PageInit中,检索会话变量并加载相应的控制步骤1和2。 确保在PageInit中执行此操作,以便ASP.NET触发事件

在装运控件中的事件处理程序中,然后更新会话变量步骤3

在购物车页面的页面_LoadComplete中,处理装运控制步骤4并加载付款控制步骤5

Scott Mitchell写了一篇关于此场景的优秀文章: