Web Parts 通信






1.67/5 (3投票s)
解释Web部件之间的通信。
引言
本文的目的是理解两个Web部件之间的通信。
例如:您有两个Web部件,每个部件都有一个下拉列表。第一个Web部件的下拉列表显示所有客户。第二个Web部件的下拉列表应该根据在第一个下拉列表中选择的客户来显示订单。在这里,两个下拉列表之间的连接并不直接,因为它们是两个单独的Web部件的一部分。
由于下拉列表位于不同的Web部件中,我们必须实现一个接口,以便两者都能与其通信。
消息契约接口设计(ICustomerOrderMessageContract)
为了在两个Web部件之间交换数据,我们需要一个应该被提供者(客户)和使用者(订单)理解的接口。这个接口基本上包含一个属性,该属性应该由提供者和使用者实现。此属性应该使用属性Personalizable
定义。我们只需要用它来交换客户ID。
提供者和使用者Web部件设计
在这里,我们必须编写两个类,一个用于提供者,另一个用于使用者,它们都实现了消息契约接口。
提供者(客户Web部件)
在这里,我们必须创建包含客户的下拉列表。这更像是在创建一个普通的控件。但是对于Web部件通信的其他操作,我们需要实现ICustomerOrderMessageContract
并扩展WebPart
类。这里的挑战是,我们必须定义一种将客户传递到类外的方式。我们可以将属性定义为提供者,其类型为ICustomerOrderMessageContract
,并使用ConnectionProvider
属性为此属性提供附加行为,并简单地返回当前对象,通过该对象我们可以访问所选客户信息。
使用者(订单Web部件)
使用者将只使用上述对象来获取客户。只需将此类创建为Web部件,并定义一个能够接收客户信息的方法。使用ConnectionConsumer
属性定义方法GetMessage()
。并且为了添加与所选客户相关的所有订单,创建一个下拉列表。
客户和订单Web部件类已准备就绪。现在我们需要将它们放入实际的Web部件中。
网页设计以容纳上述Web部件
首先,如下注册上述Web部件类
<%@ Register Assembly="ConnectionWebPartSample"
Namespace="ConnectionWebPartSample" TagPrefix="wpCustOrder" %>
现在添加一个WebPartZone,并在ZoneTemplate中,添加Web部件控件如下
<wpCustOrder:Customers ID="customers" Title="Customers" runat="server" />
<wpCustOrder:Orders ID="orders" Title="Orders" runat="server" />
现在的挑战是我们必须在它们之间提供通信。因此使用WebPartManager
来提供它们之间的连接,如下
<asp:WebPartManager ID="wpManager" runat="server">
<StaticConnections>
<asp:WebPartConnection ID="connection1"
ProviderConnectionPointID="CustomerWebPartProvider"
ProviderID="customers" ConsumerConnectionPointID="OrderWebPartConsumer"
ConsumerID="orders" />
</StaticConnections>
</asp:WebPartManager>
在上面的代码中,我们将WebPartConnection
的ProviderID
设置为Customers Web部件wpCustOrder:Customers
的ID,将WebPartConnection
的ConsumerID
设置为Orders Web部件wpCustOrder:Orders
的ID。
就这样,我们已经建立了两个Web部件之间的通信。
代码用法
- 首先,运行MyTestDB.sql以创建表和存储过程。
- 还要在DBLayer.cs中设置连接字符串。