为sharepoint创建Web部件

时间:2010-10-19 16:36:53

标签: sharepoint web-parts

我看到了为sharepoint创建Web部件的两种不同方式。大多数人最喜欢哪一个?

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

2 个答案:

答案 0 :(得分:1)

任何涉及VSeWSS的事情都会痛苦地结束,所以方法1肯定会出局。方法2也不理想,因为设置html元素作为控件变得难以管理,只是超出了你在该演示中看到的水平。我使用一个相当简单的通用基类,它将用户控件作为类型参数,并允许我将所有布局与sharepoint基础结构完美地分开。如果您以编程方式创建页面/ 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/";
        }
    }

}

答案 1 :(得分:0)

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