2011-01-24 67 views
4

你好,我正在学习如何在asp.net中创建动态用户控件。asp.net中的动态用户控件

我只知道这种类型的控件是在运行时创建或加载的。

有人知道关于这个话题的好教程吗?

在此先感谢,

回答

4

通常什么人在这里讲的是动态实例和另外一个控制占位符。

例如

Control ControlInstance = LoadControl("MyControl.ascx"); 
myPlaceholder.Controls.Add(ControlInstance); 

上述实例MyControl.ascx并把它与myPlaceholder的ID的占位符的内部。

6

你可以学习有关ASP.Net webforms中动态控件的最佳方法是如何避免它们。在asp.net中的动态控件充满了陷阱。我几乎总是推荐以下其中一种替代方法:

  • 将合理的固定数量的控件放在页面上,然后只显示您需要的控件。
  • 找出动态控件的源并将其抽象为可绑定到中继器的数据源(数组,ienumerable,list等),即使它只是对Enumerable.Range()的调用。
  • 建立一个用户控件,输出你想要的html,绕过这个内容的整个“控件”隐喻。

如果你真的必须动态控制的工作,是要保持HTTP的无状态特性考虑,与asp.net page life cycle一起是非常重要的。每个添加它自己的皱纹使动态控制工作:前者,你需要创建或重新创建控件,每次你做回发,后者,你需要这样做之前点击页面加载事件 - 通常在页面init或pre-init。

1

我同意@Joel知道页面生命周期,无状态的性质等等,这是可以避免的陷阱。需要注意的主要的事情,我不得不这样做,主要有:

  1. Page_Init - 初始化是在页面上这里,因为他们是你呈现在页面上一次的控制。这是非常重要的,因为ViewState在Init之后运行,并且需要使用与以前渲染方式相同的方法。您可以使用来自@Mitchel的代码加载控件,即

    Control ControlInstance = LoadControl(“MyControl.ascx”); myPlaceholder.Controls.Add(ControlInstance);

  2. Page_Load - 将控件的内容加载到这里,就像使用任何未动态加载的控件一样。如果您在page_init中保留了对它们的引用,则它们将在此处可用。

保持这种结构我没有太多的困难,因为这似乎是ASP的方式。NET的设计工作,即使MSDN上的所有示例都不这样做。然后你必须注意的最重要的事情是跟踪你的页面在你已经渲染的控件方面的状态。

在我的情况下,它是采取多页调查的部分编号,并从数据库中重新加载问题,所以我所要做的就是跟踪当前渲染的节号,这并不困难。

说了这么多,如果你使用动态控件只是为了显示和隐藏同一屏幕的不同视图,那么我建议你不要使用它们。在这种情况下,我更愿意使用用户控件(隐藏不适当的用户控件),占位符来标记尚未呈现的区域,或者分开页面/视图等,以便让页面承担单一责任这使得更容易调试和/或从用户获得关于他们在哪个页面上的有用信息。

0

微软的文章非常好,但我已经读过的最好的文章是在波纹管链接:

http://www.4guysfromrolla.com/articles/092904-1.aspx

如果您在ASP.NET Web窗体动态控件非常感兴趣,我建议您学习DotNetNuke CMS Portal。 DotNetNuke是使用动态控件作为使用ASP.NET门户构建动态门户和页面的核心功能的最佳案例之一。它可以在www.dotnetnuke.com免费下载。我希望它有帮助