飘遥的Blog

C/C++/.NET
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

SharePoint(WSS)学习(6) WebPart中使用ASCX

Posted on 2008-11-18 22:43  Zzx飘遥  阅读(1039)  评论(0编辑  收藏  举报
WebPart中添加控件的方式设计UI非常麻烦,但有些简单的功能不需要新建页面的方式,如果WebPart中能使用ASCX就方便多了。想到了N(>2)种方式来实现,介绍一种比较“优雅”的实现方式。

这个“优雅”是指:
·不许多处拷贝文件手工部署。
·ASCX的开发方式同ASP.NET的开发方式基本相同。
.以WebPart方式添加到页面。
 
新建WebPart,再添加新项目Module,具体操作方式参考:
创建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>

在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);
            }
        }
    }
}


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>

查看程序集的全名可用Reflector,如图:


修改、部署、激活后WebPart能够正确运行,如图:


飘遥的BLOG:http://www.cnblogs.com/zxjay/
作者:飘遥(周振兴)