2011-02-02 43 views
1

我只知道两种使用Visual Studio开发webparts的方法。sharepoint-Webparts-Development

第一个

添加web部件项目,并在适当的方法编写代码。

protected override void OnInit(EventArgs e) 
protected override void OnLoad(EventArgs e) 
protected override void CreateChildControls() 
protected override void LoadViewState(object savedState) //Only at Postback 
protected override void OnPreRender(EventArgs e) 
protected override void Render(System.Web.UI.HtmlTextWriter writer) 
protected override void OnUnload(EventArgs e) 
public override void Dispose() 

直接从VS部署解决方案。采用WSP文件并使用STSADM.EXE跨站点/场进行部署。这是遵循的标准方法。

第二种方法:

创建用户控制和复制Usercontrol.ascx和Usercontrol.ascx.cs到_Layouts。

创建一个新的WebPart项目并使用

_UserControl = this.Page.LoadControl("\\_layouts\\_UserControl.ascx"); 

注册控件,并将其从VS.部署

但是这种方法看起来并不安全,因为我们手动复制到_layouts。

我们要采取这种方法的唯一原因是我们可以按照我们想要的方式显示控件,而不用费心去查看webpart生命周期的各种事件。

有人能让我知道你在你的公司采取了什么方法。

谢谢。

哈日Gillala

回答

1

当我开始在SharePoint 2007中开发时,我们使用了第一种描述的方法。过了一段时间,我们转而采用第二种方法。

但是,我们不是将ascx文件放入布局,而是将它们放在controltemplates下的自定义目录中。我们的网络的一部分代码,然后是这样的:

public class OurControlWebPart : WebPart 
{ 
    protected override void CreateChildControls() 
    { 
     base.CreateChildControls(); 
     Control userControl = 
      Page.LoadControl("~/_controltemplates/OurProject/OurControl.ascx"); 
     Controls.Add(userControl); 
    } 
} 

如果我们的网络的一部分有任何额外的属性或toolparts,他们将在这个类进行处理,然后转发到控制类。我非常喜欢将控件的逻辑与Web部件的逻辑分开。另外,我喜欢能够控制HTML中控件的布局或使用Visual Studio设计器。

而这些文件不需要手动部署。然后可以包含在您的解决方案包中。就像您将路径部署到12 \ TEMPLATE \ FEATURES目录一样,您可以将您的ascx文件部署到12 \ TEMPLATE \ CONTROLTEMPLATES。

0

绝对是第二个,只是看在可视的WebParts在2010年(它们是建立完全一样的)。

0

sp2007,无论哪种方式都很好,这取决于你如何构建控制树。我更喜欢第一种方法。

sp2010你有更多的选择。

1)你的第一个选择应该是一个沙盒装web部分,它使用了代码构建方法。 2)如果这个限制太大,你可以尝试一个可视化Web部件,类似于sp2007中的智能部分。

3)然后是基于标准代码的方法。