开发部署带有自定义用户控件的WebPart全过程

开发部署带有自定义用户控件的WebPart全过程

说明:在创建此项目前,安装了一系列的插件:

包括:

Vs2005 sp1

VSeWSS.exe  ---(webpart模板)

OfficeServerSDK.exe

 

VSTO+2005+SE.exe

 

一、创建用户控件
在VS2005中,新建一个项目:ASP.net WEB应用程序。起名为:
MyUserControlTest1,如下图:

 

自动生成项目:MyUserControlTest1和解决方案MyUserControlTest1。
在解决方案的资源管理器中,会自动自成一个Default.aspx文件。删除Default.aspx文件。
在项目MyUserControlTest1中,添加现在项,选择“web 用户控件”,如图:


用户控件名:MyWebUserControl.ascx。
在用户控件中添加一个日历控件Calendar1。
在MyWebUserControl.ascx.cs文件中添加一行后台代码:
 protected void Page_Load(object sender, EventArgs e)
        {
            this.Calendar1.ToolTip = "这是eNet自定义的用户控件(最简单的日历)";
        }
如下图:


编译项目。到此,用户控件就开发完了。该用户控件包含的下面的三个文件是在webpart中需要使用的:

MyWebUserControl.ascx
MyWebUserControl.ascx.cs
MyWebUserControl.ascx.designer.cs

如下图:

 


二、创建webpart
1、创建项目:
在解决方案中添加新项目:
MyWebPart,如图:


2、添加用户控件。
在资料管理器中点击MyWebPart项目,右键,添加现有项,将刚才的用户控件的三个文件全部添加进来。
说明:用户控件生成的DLL文件不需要引用进来。

3、修改MyWebPart.cs后台代码:

在 MyWebPart.cs文件中,添加System.IO的引用。

 private System.Web.UI.Control _innerControl;
重写:CreateChildControls
protected override void CreateChildControls()
        {
            using (StreamReader reader = new StreamReader(System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("SampleWebPart.WebUserControl1.ascx")))
            {
                String resourceContent = reader.ReadToEnd();
                using (StreamWriter writer = new StreamWriter(this.Page.Server.MapPath("/bin/MyWebUserControl.ascx"), false))
                {
                    writer.Write(resourceContent);
                }
            }
            this._innerControl = this.Page.LoadControl("/bin/MyWebUserControl.ascx");
            this.Controls.Add(this._innerControl);
        }
在Render事件中如下代码:
        protected override void Render(HtmlTextWriter writer)
        {
            this.EnsureChildControls();
            this._innerControl.RenderControl(writer);

        }
完整的代码如下:

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

using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
using Microsoft.SharePoint.WebPartPages;
using System.IO;

namespace MyWebPart
{
    [Guid("9a7ee2e6-ebff-4594-a3e3-d59aceae4e45")]
    public class MyWebPart : System.Web.UI.WebControls.WebParts.WebPart
    {
        public MyWebPart()
        {
            this.ExportMode = WebPartExportMode.All;
        }

        protected override void Render(HtmlTextWriter writer)
        {
            this.EnsureChildControls();
            this._innerControl.RenderControl(writer);
        }
        private System.Web.UI.Control _innerControl;
        protected override void CreateChildControls()
        {
            using (StreamReader reader = new StreamReader(System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("SampleWebPart.WebUserControl1.ascx")))
            {
                String resourceContent = reader.ReadToEnd();
                using (StreamWriter writer = new StreamWriter(this.Page.Server.MapPath("/bin/MyWebUserControl.ascx"), false))
                {
                    writer.Write(resourceContent);
                }
            }
            this._innerControl = this.Page.LoadControl("/bin/MyWebUserControl.ascx");
            this.Controls.Add(this._innerControl);
        }
    }
}


注意:MyWebUserControl.ascx文件名要和你用户控件的文件名一致。
看代码可以看出,加载webpart时,会在你所部署的网站的bin目录下自动生成文件:MyWebUserControl.ascx

4、修改AssemblyInfo.cs文件:

在项目的AssemblyInfo.cs文件中添加引用:
using System.Security;
在最后添加一行:[assembly :AllowPartiallyTrustedCallers()]
编译,生成MyWebPart.dll文件,到此,webpart开发完毕。

三、部署webpart
1、将MyWebPart.dll拷贝到你需要使用该WEB部件的网站的bin目录下。(注意:只需要这一个文件,其它的文件就不需要了)
2、修改web.config文件:添加一行到safeControl小节。如下:

 <SafeControl Assembly="MyWebPart" Namespace="MyWebPart" TypeName="*" Safe="True" />
    </SafeControls>
3、不用重启IIS,直接在该网站的“网站设置-修改所有网站设置-Web 部件库”中,选择新建,可以看到刚才部署的webpart了。

4、选择该webpart,然后点击“导入”按钮,即可。


四、使用开发的webpart。(略)


 

 


 

posted @ 2009-06-04 15:12  一个呆子  阅读(624)  评论(1编辑  收藏  举报