DelegateControl

来源:互联网 发布:图论十大算法 编辑:程序博客网 时间:2024/05/17 04:24

对开发者来说,使用包装器包装用户控件开发很方便。在C:/Program Files/Common Files/Microsoft Shared/web server extensions/12/TEMPLATE/CONTROLTEMPLATES这个目录下,发现有很多系统用户控件,如欢迎的用户控件、网站操作的用户控件,MOSS是如何调用这些用户控件的呢?答案就是DelegateControl这个服务端控件,该控件从SharePoint.WebControls下继承。

使用DelegateControl控件包装用户控件需要以下几个步骤。

7.6.2.1  创建用户控件

创建一个简单的用户控件。打开Web项目工程WebIT,新建一个用户控件,命名为SearchBox.ascx

代码如下所示。

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="SearchBox.ascx.cs" Inherits="WebIT.DelegateControl.SearchBox" %>

 

<input id="txtkey" name="txtkey" type="text"  />

<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text= "Button" />

<asp:Label ID="Label1" runat="server" Width="338px"></asp:Label>

后台代码如下所示。

using System;

using System.Data;

using System.Configuration;

using System.Collections;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

 

using Microsoft.SharePoint;

using Microsoft.SharePoint.WebControls;

using Microsoft.SharePoint.Utilities;

 

namespace WebIT.DelegateControl

{

    public partial class SearchBox : System.Web.UI.UserControl

    {

        protected void Button1_Click(object sender, EventArgs e)

        {

            if (Request["txtkey"] != null)

            {

                this.Label1.Text = Request["txtkey"].ToString();

            }

        }

    }

}

7.6.2.2  创建feature

feature.xml的内容如下所示。

<?xml version="1.0" encoding="utf-8"?>

<Feature

  Id="AA929AFF-4602-4d7f-A501-B80AC9A4BB32"

  Title="DelegateControl处理用户控件"

  Description="MOSS处理用户控件的解决方案"

  Scope="Site"

  xmlns="http://schemas.microsoft.com/sharepoint/">

  <ElementManifests>

    <ElementManifest Location="SearchBox.xml" />

  </ElementManifests>

</Feature>

SearchBox.xml的内容如下所示。

<?xml version="1.0" encoding="utf-8" ?>

<Elements xmlns="http://schemas.microsoft.com/sharepoint/">

  <Control

   Id="SearchBox"

   Sequence="50"

   ControlSrc="~/_CONTROLTEMPLATES/SearchBox.ascx">

  </Control>

</Elements>

请注意SearchBox.xml文件中ControlSrc的写法。

7.6.2.3  部署

编写批处理文件installfeature.bat来部署安装。

echo Copying the feature...

echo.

rd /s /q "%CommonProgramFiles%/Microsoft Shared/web server extensions/12/ TEMPLATE/FEATURES/SearchBox"

mkdir "%CommonProgramFiles%/Microsoft Shared/web server extensions/12/ TEMPLATE/FEATURES/SearchBox"

 

copy /Y feature.xml  "%CommonProgramFiles%/Microsoft Shared/web server extensions/12/TEMPLATE/FEATURES/SearchBox/"

copy /Y SearchBox.xml "%CommonProgramFiles%/Microsoft Shared/web server extensions/12/TEMPLATE/FEATURES/SearchBox/"

copy /Y SearchBox.ascx "%CommonProgramFiles%/Microsoft Shared/web server extensions/12/TEMPLATE/CONTROLTEMPLATES/"

 

echo.

echo Activating the feature...

echo.

pushd %programfiles%/common files/microsoft shared/web server extensions/12/ bin

stsadm -o deactivatefeature -filename SearchBox/feature.xml -url http:// yang:9000

stsadm -o uninstallfeature -filename SearchBox/feature.xml

 

 

stsadm -o installfeature -filename SearchBox/feature.xml -force

stsadm -o activatefeature -filename SearchBox/feature.xml -url http:// yang:9000

 

iisreset

pause

这个批处理文件中需要注意的一点是把SearchBox.ascx用户控件复制到了

"%CommonProgramFiles%/Microsoft Shared/web server extensions/12/TEMPLATE/ CONTROLTEMPLATES/"这个目录下。

执行批处理文件后。单击网站操作→网站设置→修改所有网站设置,单击网站集功能,打开如图7-35所示的界面。

7.6.2.4  编写测试页面

打开SharePoint Designer 2007,在9000的站点下新建一个aspx文件,命名为SearchBox.aspx,保存在Pages目录下。打开该页面,在代码模式下,把以下代码放在一个表格的一个单元格td中。

<SharePointWebControls:DelegateControl ControlId="SearchBox" runat= "server">

</SharePointWebControls:DelegateControl>

7-35  网站集功能界面

注意:ControlId="SearchBox"这个属性设定需要和SearchBox.xml文件中的ControlId相一致。

之后,把该页面签入发布。在浏览器中输入http://yang:9000/Pages/SearchBox.aspx,在文本框中输入任意内容,单击按钮,在页面会输出内容,如图7-36所示。

7-36 最终页面效果