• 如何自己写一个用户控件包装器来代替QuickPart! cloud


    如何自己写一个用户控件包装器来代替QuickPart!

    具体步骤如下:

    1.打开VS2008,新建一个Web Part类型的项目工程,命名为SuperWebPart

    注:Windows SharePoint Services 3.0 工具:Visual Studio 2008 Extensions 1.2 版,下载地址如下:

    http://www.microsoft.com/downloads/details.aspx?familyid=7BF65B28-06E2-4E87-9BAD-086E32185E68&displaylang=zh-cn  (中文版)

    http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=7bf65b28-06e2-4e87-9bad-086e32185e68    (英文版)

    新建工程如下图:

    2.点击OK后,在项目中新建一个名称为 TreeWebPart.cs 类库文件和一个类型为Web Part的文件(命名为SuperWebPart),如下图:

     

    3.在TreeWebPart.cs类库文件中编写代码,此类继承System.Web.UI.WebControls.WebParts.EditorPart这个编辑部件,目的用于编辑System.Web.UI.WebControls.WebParts.WebPart控件,并且需要重写ApplyChanges,SyncChanges,CreateChildControls等方法,

    完整代码如下

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Data;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using Microsoft.SharePoint;
    using System.IO;
    using System.Configuration;

    namespace SuperWebPart
    {
        
    class TreeWebPart:EditorPart
        {
            
    private DropDownList ddlTree = new DropDownList();

            
    public override bool ApplyChanges()
            {
                SuperWebPart part 
    = (SuperWebPart)WebPartToEdit;
                part.Url 
    = this.ddlTree.SelectedItem.Value;
                
    return true;
            }

            
    public override void SyncChanges()
            {

            }

            
    protected override void CreateChildControls()
            {
                
    base.CreateChildControls();

                
    //从wpresources目录下找出所有的文件
                string[] a = System.IO.Directory.GetFiles(HttpContext.Current.Server.MapPath("../wpresources"));
                FileInfo info;
                
    for (int i = 0; i < a.Length; i++)
                {
                    info 
    = new FileInfo(a[i]);
                    ddlTree.Items.Add(info.Name);
                }

                Controls.Add(ddlTree);
            }

            
    protected override void RenderChildren(System.Web.UI.HtmlTextWriter writer)
            {
                
    base.RenderChildren(writer);
            }

            
    public override void RenderControl(System.Web.UI.HtmlTextWriter writer)
            {
                
    base.RenderControl(writer);
            }
        }
    }

    4.SuperWebPart.cs类库文件的完整代码如下,此类需要从WebParts和IWebEditable接口继承:

    using System;
    using System.Runtime.InteropServices;
    using System.Web.UI;
    using System.Web.UI.WebControls.WebParts;
    using System.Xml.Serialization;
    using System.Collections;
    using System.ComponentModel;

    using Microsoft.SharePoint;
    using Microsoft.SharePoint.WebControls;
    using Microsoft.SharePoint.WebPartPages;

    namespace SuperWebPart
    {
        [Guid(
    "d833c329-1066-4c59-a73b-38341ae07797")]
        
    public class SuperWebPart : System.Web.UI.WebControls.WebParts.WebPart,IWebEditable
        {
            
    public SuperWebPart()
            {
            }

            
    private UserControl usercontrol;

            
    protected override void CreateChildControls()
            {
                
    base.CreateChildControls();
                Controls.Clear();

                
    if (this.Url != string.Empty)
                {
                    usercontrol 
    = (UserControl)Page.LoadControl(@"/wpresources/" + this.Url);
                    Controls.Add(usercontrol);
                }
            }

            
    protected override void Render(HtmlTextWriter writer)
            {
                EnsureChildControls();
                
    if (usercontrol != null)
                {
                    usercontrol.RenderControl(writer);
                }
            }

            
    private string _url = string.Empty;

            [Personalizable]
            [WebBrowsable]
            [WebDisplayName(
    "请手工输入一个控件文件")]
            [WebDescription(
    "只需要文件名就行了")]
            [Category(
    "个性设置")]
            
    public string Url
            {
                
    get { return _url; }
                
    set { _url = value; }
            }

            
    //把TreeWebPart部件加入到俄EditorParts中
            public EditorPartCollection CreateEditorParts()
            {
                TreeWebPart obj 
    = new TreeWebPart();
                obj.ID 
    = this.ID + "_selectTreeWebpart";
                obj.Title 
    = "选择用户控件by zhangyun";
                ArrayList EditorParts 
    = new ArrayList();
                EditorParts.Add(obj);
                
    return new EditorPartCollection(EditorParts);
            }
        }
    }

    5.编译成功后,

    (1).把生成的SuperWebPart.dll放到SharePoint网站对应的bin目录下 C:\Inetpub\wwwroot\wss\VirtualDirectories\8080\bin

    ,在对应的SharePoint网站的webconfig文件中的<SafeControl></SafeControl>代码中添加如下代码:

    <SafeControl Assembly="SuperWebPart, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9f4da00116c38ec5"

    Namespace="SuperWebPart" TypeName="*" Safe="True" />,并修改 <trust level="Full" originUrl="" />

    (2).把写好用户控件(?.ascx)文件放到SharePoint网站对应的wpresources目录下 C:\Inetpub\wwwroot\wss\VirtualDirectories\8080\wpresources

    这样,SuperWebPart用户控件包装器就开发完成了,效果和QuickPart一样,最后的效果如下:

     

  • 相关阅读:
    获取html页面传递过来的参数
    jqueryWeiui+pagehelper滚动加载(实现分页)
    【JS】js随笔
    【Java】Java基础
    【FrameWork】Hibernate
    【FrameWork】Struts2
    去掉inline-block间的间隙
    javascript单例模式
    关于call/apply与bind的一点误解
    git笔记-常用命令
  • 原文地址:https://www.cnblogs.com/cloudzhang/p/1417863.html
Copyright © 2020-2023  润新知