.net 何时使用CreateChildControls()与在ASPX中嵌入

.net 何时使用CreateChildControls()与在ASPX中嵌入,.net,asp.net,sharepoint,.net,Asp.net,Sharepoint,我正在为SharePoint 2007开发一个Web部件,并看到了几篇建议执行所有操作的帖子。我正在从JavaJ2EE开发过渡,因此我没有.Net/ASP/etc的平台历史 在其他地方,它显示了如何通过使用标签来做同样的事情 我的问题是: 管理在何处实施控制的规则是什么?这个规则最近有没有改变,ASP vs ASP.Net或者ASP.NETMVC?此建议是否仅限于SharePoint开发?我将强调您正在为2007年开发Web部件这一事实。Web部件意味着您希望用户能够根据自己的意愿将部件添加到页

我正在为SharePoint 2007开发一个Web部件,并看到了几篇建议执行所有操作的帖子。我正在从JavaJ2EE开发过渡,因此我没有.Net/ASP/etc的平台历史

在其他地方,它显示了如何通过使用标签来做同样的事情

我的问题是:


管理在何处实施控制的规则是什么?这个规则最近有没有改变,ASP vs ASP.Net或者ASP.NETMVC?此建议是否仅限于SharePoint开发?

我将强调您正在为2007年开发Web部件这一事实。Web部件意味着您希望用户能够根据自己的意愿将部件添加到页面中。要实现web部件,则需要一个独立的DLL,该DLL部署到SharePoint IIS应用程序的bin目录或全局程序集缓存中

通常使用SharePoint时,您没有可嵌入控件并使其可复制的ASPX页面。ASPX页面将由用户或功能创建,然后用户将向这些页面添加web部件。SharePoint本质上是一个虚拟文件系统,许多ASPX页面要么存在于数据库中,要么存在于SharePoint根文件夹中,在一个非平凡的任务背后生成代码

web部件需要作为独立的DLL文件进行部署。考虑到web部件开发的方式,您没有设计图面来创建用户界面,因此您需要通过代码创建控制树,生命周期中的首选时间是CreateChildControls部分(请参阅前面的链接)

还有其他一些方法可以解决这个问题,比如SmartPart()的儿子,它允许您创建一个用户控件,然后将用户控件加载到web部件控件树中。这基本上是微软在2010年采用的可视化Web部件功能

SharePoint的绝大多数Web部件开发使用与ASP.NET开发相同的名称空间,因此,如果您没有在代码中执行SharePoint特定的功能,如列表读取等,则Web部件应该在ASP.NET和SharePoint环境中都可用


约翰这里有一些想法

动态控件创建(在CreateChildControls()内)

  • 这是一个更加动态的解决方案
  • 如果不同的用户需要不同的控件布局,那么您可以更好地控制流。这意味着您可以将控件嵌入到不同的树或树分支中,而不仅仅是使它们可见/不可见
  • 如果需要从部件外部访问控件实例,则可能更合适
声明性定义(ASPX)

  • 的确更符合MVC风格的做事方式
  • 这是推荐的方法,除非您有理由不这样做(可能是出于上述原因)
  • 更易于维护UI组件和布局
  • 您还可以通过创建ASCX文件,以声明方式创建可重用的用户控件
您还可以混合和匹配..声明一些静态元素,并根据需要通过在运行时将它们添加到面板控件中来动态添加其他元素

另一种常见的方法是对公共元素(如TextBox或data grid)进行子Cass,并修改该控件的行为、外观和/或呈现方式(通过重写呈现事件)。这样,您就可以在ASPX中简单地使用该控件的版本。 这是一个双赢的局面,因为您可以在将布局与业务逻辑分离的同时获得最大的控制权。
我总是子类化,以便嵌入通用功能,如所有控件的统一外观、个性化等。

这在很大程度上解释了这一点。它是否也适用于网站页面?另外,在母版页中嵌入控件如何?作为SharePoint ASPX文件的一般规则,自ASPX fil以来,您不能有代码隐藏e并不真正存在于文件系统中。母版页或网站页中的绝大多数嵌入式控件都是web部件(部署到应用程序的GAC或bin中)通常情况下,用户控件通过一项功能部署到SharePoint根文件夹。此外,如果不引入安全问题,您不能像使用老式ASP那样在ASPX中使用脚本逻辑,这需要您修改web.config以使文档库能够执行代码,这是管理员不愿意看到的o。