开发部署带有自定义用户控件的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。(略)