• 关于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的回复

  • 相关阅读:
    DataList嵌套DataList
    Enterprise Library: Data Access Application Block类设计分析篇
    一些web开发中常用的、做成cs文件的js代码 搜刮来的
    DataList小结
    kill 某个线程
    在JBOSS下发布Web程序
    调整命令行的列数和行数 mode con: cols=100 lines=10000
    了解JavaScript类
    http
    Notepad++文本比较插件:Compare
  • 原文地址:https://www.cnblogs.com/Smalltalk/p/1496730.html
Copyright © 2020-2023  润新知