关于webpart的通讯

假设创建一个由用户输入员工ID,查询该员工处理订单详情的示例。用户输入界面位于一个WebPart中,显示订单详情的界面位于另一个WebPart中。显然,前者中的WebPart是提供者,后者中的WebPart是订阅者。二者的交互过程是,首先,用户在提供者所在的WebPart中输入员工ID,然后,该值传递给订阅者,最后,订阅者根据获取的ID值,从数据库中获取相关数据并显示在页面上。下面是与实现通信机制有关的五个要点说明,其与WebPart通信机制密切相关。

1)定义接口

定义接口与通信过程中将要传输的对象有关。如果需要传输的仅仅是简单数值,那么在接口中只要定义一个简单属性即可。如果需要传输的是复杂对象,那么必须根据实际需求,定义接口成员。本示例中,提供者和订阅者之间传递的是整数类型的员工ID,因此,只要定义一个属性EmployeeID即可。下面是定义接口代码。

定义接口代码

public interface IEmployeeInfo

{

    int EmployeeID { get; set;}

}

2)在提供者中实现接口成员

在这一过程中,前提是实现提供者的类,不仅要声明继承自WebPart基类,而且还要声明实现前文定义的接口。在此基础上,才能够实现接口成员。接口只有一个成员EmployeeID,其在提供者类中的实现是很简单的,代码如下所示。

在提供者中实现接口成员代码

public class EmployeesWebPart : WebPart, IEmployeeInfo

{

    // 定义初始值

    private int _empID = 1;

    ......

    // 实现接口成员EmployeeID

    public int EmployeeID

    {

        get { return _empID; }

        set { _empID = value; }

    }

}

3)在提供者中实现[ConnectionProvider]方法

实现[ConnectionProvider]方法的核心是返回提供者实例,这样订阅者才可能由此获得传递的对象。另外,开发人员还必须在此回传方法上方添加ConnectionProvider特性设置,以此通知WebPartManager控件这里是提供者的连接点。同时,还可设置连接点显示名称DisplayName、连接点标识ID等内容。下面是本例中[ConnectionProvider]方法代码。在代码中已经设置DisplayNameID都等于EmployeeIDProvider。这些设置与WebPartManager中声明的StaticConnections关联。

实现[ConnectionProvider]方法代码

[ConnectionProvider("EmployeeIDProvider", "EmployeeIDProvider")]

public IEmployeeInfo ProvideEmployeeInfo()

{

    return this;

}

4)在订阅者中实现[ConnectionConsumer]方法

[ConnectionConsumer]方法的核心是调用来自提供者的数据对象,并使之与订阅者内部对象发生联系,由此才能更好利用传递的数据。开发人员必须在[ConnectionConsumer]方法上方添加ConnectionConsumer特性,以此告知WebPartManager控件这里是订阅者的连接点。同时,还可设置联结点名称DisplayName、连接点标识ID等内容。下面是本例中[ConnectionConsumer]方法代码。需要注意的是回传方法的声明,其只有一个参数(接口类型),并且返回值为空。同时,设置DisplayNameID都等于EmployeeIDConsumer。这些设置与WebPartManager中声明的StaticConnections关联。

实现[ConnectionConsumer]方法代码

[ConnectionConsumer("EmployeeIDConsumer", "EmployeeIDConsumer")]

public void GetEmployeeInfo(IEmployeeInfo empInfo)

{

    if (empInfo != null)

    {

        _empID = empInfo.EmployeeID;

    }

    else

    {

        throw new NotSupportedException("未能连接数据库.");

    }

}

5)在WebPartManager控件中声明连接

如果是创建基于静态连接的WebPart通信,那么在WebPartManager中声明连接是必须的。在声明过程中,主要设置的是提供者和订阅者的细节内容。例如,提供者标识ProviderID、提供者连接点ProviderConnectionPointID、订阅者标识ConsumerID、订阅者连接点ConsumerConnectionPointID等。下面是声明连接的代码。

声明连接代码

<asp:WebPartManager ID="WebPartManager1" runat="server">

    <StaticConnections>

        <asp:WebPartConnection ID="EmpConnection" ProviderID="EmployeesWebPart1" ProviderConnectionPointID="EmployeeIDProvider" ConsumerID="OrdersWebPart1" ConsumerConnectionPointID="EmployeeIDConsumer" />

    </StaticConnections>

</asp:WebPartManager>

如果开发人员创建的是基于动态连接的WebPart通信,则需要在页面中添加ConnectionsZone控件。该控件将能够自动为用户创建自定义连接对象的用户界面。

 

转自http://www.cnblogs.com/zmsx/archive/2005/12/21/301994.html   

POLARIS的回复

原文地址:https://www.cnblogs.com/Smalltalk/p/1496730.html