WebPart中添加控件的方式设计UI非常麻烦,但有些简单的功能不需要新建页面的方式,如果WebPart中能使用ASCX就方便多了。想到了N(>2)种方式来实现,介绍一种比较“优雅”的实现方式。
这个“优雅”是指:
创建Asp.net Web Application,设计、编码用户控件ASCX,将*.ascx,*.ascx.cs,*.ascx.designer.cs添加到Module项中。
工程视图如下:
配置该ASCX的URL等,参照前面新建ASPX页面的配置方式。
Module.xml内容为:
在WebPart的*.cs文件中加载ASCX,代码如下:
查看程序集的全名可用Reflector,如图:
修改、部署、激活后WebPart能够正确运行,如图:
飘遥的BLOG:http://www.cnblogs.com/zxjay/
作者:飘遥(周振兴)
这个“优雅”是指:
·不许多处拷贝文件手工部署。
·ASCX的开发方式同ASP.NET的开发方式基本相同。
.以WebPart方式添加到页面。
新建WebPart,再添加新项目Module,具体操作方式参考:
·ASCX的开发方式同ASP.NET的开发方式基本相同。
.以WebPart方式添加到页面。
创建Asp.net Web Application,设计、编码用户控件ASCX,将*.ascx,*.ascx.cs,*.ascx.designer.cs添加到Module项中。
工程视图如下:
配置该ASCX的URL等,参照前面新建ASPX页面的配置方式。
Module.xml内容为:
<?xml version="1.0" encoding="utf-8"?>
<Elements Id="e5e0924d-b286-4d9c-b270-063f446df208" xmlns="http://schemas.microsoft.com/sharepoint/">
<Module Name="Ascx" Url="Controls">
<File Path="SampleAscx.ascx" Url="SampleAscx.ascx" />
</Module>
</Elements>
<Elements Id="e5e0924d-b286-4d9c-b270-063f446df208" xmlns="http://schemas.microsoft.com/sharepoint/">
<Module Name="Ascx" Url="Controls">
<File Path="SampleAscx.ascx" Url="SampleAscx.ascx" />
</Module>
</Elements>
在WebPart的*.cs文件中加载ASCX,代码如下:
using System;
using System.Runtime.InteropServices;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace Xianfen.Net.SampleWebPartWithAscx
{
[Guid("a4175a9d-9b78-4eb4-8159-11bc6c5a6cfa")]
public class MySampleWebPartWithAscx : System.Web.UI.WebControls.WebParts.WebPart
{
public MySampleWebPartWithAscx()
{
}
protected override void CreateChildControls()
{
try
{
//加载ASCX
Control c = this.Page.LoadControl("~/Controls/SampleAscx.ascx");
this.Controls.Add(c);
}
catch (Exception ex)
{
//显示错误,正式发布时去掉该代码
Label lbl = new Label();
lbl.Text = ex.Message;
this.Controls.Add(lbl);
}
}
}
}
using System.Runtime.InteropServices;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace Xianfen.Net.SampleWebPartWithAscx
{
[Guid("a4175a9d-9b78-4eb4-8159-11bc6c5a6cfa")]
public class MySampleWebPartWithAscx : System.Web.UI.WebControls.WebParts.WebPart
{
public MySampleWebPartWithAscx()
{
}
protected override void CreateChildControls()
{
try
{
//加载ASCX
Control c = this.Page.LoadControl("~/Controls/SampleAscx.ascx");
this.Controls.Add(c);
}
catch (Exception ex)
{
//显示错误,正式发布时去掉该代码
Label lbl = new Label();
lbl.Text = ex.Message;
this.Controls.Add(lbl);
}
}
}
}
F5编译部署,按照前面文章介绍的方法部署、激活WebPart和Module,将WebPart添加到页面,执行结果如下:
提示找不到'Xianfen.Net.WebPartWithAscx.SampleAscx'类型,没有找到程序集。也就是前面文章介绍无法找到动态页的后台代码。打开其它已部署的ascx或aspx,可以看:
Inherits="Microsoft.SharePoint.WebPartPages.WebPartPage, Microsoft.SharePoint,Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"等等,包含的是类型全名和程序集全名,自己稍微改一下ASCX的头,
ASCX的内容为:
<%@ Control Language="C#" AutoEventWireup="true" Inherits="Xianfen.Net.WebPartWithAscx.SampleAscx, SampleWebPartWithAscx, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9f4da00116c38ec5" %>
<div style="width: 220px; padding: 10px; border: solid 1px #ccc; background-color: #ecc;">
<asp:TextBox ID="txt1" runat="server"></asp:TextBox>
<asp:Button ID="btn1" runat="server" Text="Click" OnClick="btn1_Click" />
</div>
<div style="width: 220px; padding: 10px; border: solid 1px #ccc; background-color: #ecc;">
<asp:TextBox ID="txt1" runat="server"></asp:TextBox>
<asp:Button ID="btn1" runat="server" Text="Click" OnClick="btn1_Click" />
</div>
查看程序集的全名可用Reflector,如图:
修改、部署、激活后WebPart能够正确运行,如图:
飘遥的BLOG:http://www.cnblogs.com/zxjay/
作者:飘遥(周振兴)