【问题标题】:Create web parts for sharepoint为共享点创建 Web 部件
【发布时间】:2011-04-27 14:26:57
【问题描述】:

我看到了 2 种不同的方式来为 sharepoint 创建 Web 部件。哪一个最受青睐?

http://msdn.microsoft.com/en-us/library/aa973249%28office.12%29.aspx

【问题讨论】:

标签: sharepoint web-parts


【解决方案1】:

对于我编写的少数 Web 部件,我想我使用方法 #2 比方法 #1 更多。看起来更直接,并且有可能在 SharePoint 环境之外重复使用(取决于您的业务逻辑的深度)。

【讨论】:

  • 感谢杰西的意见。我知道你所说的使用第二种方法是什么意思。 Web 部件基于 asp.net (2.0),因此它在共享点应用程序之外更有用。谢谢你的话。
【解决方案2】:

任何涉及 VSeWSS 的事情都只会以痛苦告终,因此方法 1 绝对不可行。方法 2 也不理想,因为将 html 元素设置为控件在超出您在该演示中看到的级别变得难以管理。我使用了一个相当简单的通用基类,它将用户控件作为类型参数,并让我将所有布局与共享点基础结构很好地分开。如果您以编程方式创建页面/Web 部件,那么大多数 Web 部件 xml 也是可选的。

public abstract class UserControlWebPart<T> : Microsoft.SharePoint.WebPartPages.WebPart where T:UserControl
{
    protected UserControlWebPart()
    {
        this.ExportMode = WebPartExportMode.All;
    }

    protected virtual void TransferProperties(T ctrl)
    {
        var tc = typeof(T);
        var tt = this.GetType();

        foreach (var p in tt.GetProperties()) {
            if (p.IsDefined(typeof(ControlPropertyAttribute), true)) {
                foreach (var p2 in tc.GetProperties()) {
                    if (p2.Name == p.Name) {
                        p2.SetValue(ctrl, p.GetValue(this, null), null);
                    }
                }
            }
        }
   }


    protected override void CreateChildControls()
    {
        string controlURL = ControlFolder+typeof(T).Name+".ascx";
        var ctrl = Page.LoadControl(controlURL) as T;
        TransferProperties(ctrl);
        this.Controls.Add(ctrl);
    }

    protected virtual string ControlFolder
    {
        get {
            return "~/_layouts/UserControlWebParts/";
        }
    }

}

【讨论】:

  • 谢谢汤姆。这看起来更好,我真的很欣赏每种用途的内幕。做得好。再次。非常感谢。
猜你喜欢
  • 2010-12-18
  • 2011-01-17
  • 2013-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-19
相关资源
最近更新 更多