ConsumerConnectionPoint Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Define um objeto de ponto de conexão que permite que um controle de servidor que funciona como consumidor forme uma conexão com um provedor.
public ref class ConsumerConnectionPoint : System::Web::UI::WebControls::WebParts::ConnectionPoint
public class ConsumerConnectionPoint : System.Web.UI.WebControls.WebParts.ConnectionPoint
type ConsumerConnectionPoint = class
inherit ConnectionPoint
Public Class ConsumerConnectionPoint
Inherits ConnectionPoint
- Herança
Exemplos
O exemplo de código a seguir mostra maneiras simples de criar uma conexão declarativamente, programaticamente ou por meio da interface do usuário, em cada caso, fazendo uso de um ponto de conexão do consumidor.
O exemplo tem quatro partes:
Um controle de usuário que permite alterar o modo de exibição de Web Parts em uma página.
Código-fonte para uma interface e dois WebPart controles que atuam como o provedor e o consumidor de uma conexão.
Uma página da Web para hospedar todos os controles e executar o exemplo de código.
Uma explicação de como executar a página de exemplo.
A primeira parte desse exemplo de código é o controle de usuário que permite que os usuários alterem os modos de exibição em uma página da Web. Salve o código-fonte a seguir em um arquivo .ascx, dando a ele o nome do arquivo atribuído ao Src
atributo da Register
diretiva para esse controle de usuário, que fica próximo à parte superior da página da Web de hospedagem. Para obter detalhes sobre modos de exibição e uma descrição do código-fonte nesse controle, consulte Passo a passo: alterando modos de exibição em uma página de Web Parts.
<%@ control language="C#" classname="DisplayModeMenuCS"%>
<script runat="server">
// Use a field to reference the current WebPartManager.
WebPartManager _manager;
void Page_Init(object sender, EventArgs e)
{
Page.InitComplete += new EventHandler(InitComplete);
}
void InitComplete(object sender, System.EventArgs e)
{
_manager = WebPartManager.GetCurrentWebPartManager(Page);
String browseModeName = WebPartManager.BrowseDisplayMode.Name;
// Fill the dropdown with the names of supported display modes.
foreach (WebPartDisplayMode mode in _manager.SupportedDisplayModes)
{
String modeName = mode.Name;
// Make sure a mode is enabled before adding it.
if (mode.IsEnabled(_manager))
{
ListItem item = new ListItem(modeName, modeName);
DisplayModeDropdown.Items.Add(item);
}
}
// If shared scope is allowed for this user, display the scope-switching
// UI and select the appropriate radio button for the current user scope.
if (_manager.Personalization.CanEnterSharedScope)
{
Panel2.Visible = true;
if (_manager.Personalization.Scope == PersonalizationScope.User)
RadioButton1.Checked = true;
else
RadioButton2.Checked = true;
}
}
// Change the page to the selected display mode.
void DisplayModeDropdown_SelectedIndexChanged(object sender, EventArgs e)
{
String selectedMode = DisplayModeDropdown.SelectedValue;
WebPartDisplayMode mode = _manager.SupportedDisplayModes[selectedMode];
if (mode != null)
_manager.DisplayMode = mode;
}
// Set the selected item equal to the current display mode.
void Page_PreRender(object sender, EventArgs e)
{
ListItemCollection items = DisplayModeDropdown.Items;
int selectedIndex =
items.IndexOf(items.FindByText(_manager.DisplayMode.Name));
DisplayModeDropdown.SelectedIndex = selectedIndex;
}
// Reset all of a user's personalization data for the page.
protected void LinkButton1_Click(object sender, EventArgs e)
{
_manager.Personalization.ResetPersonalizationState();
}
// If not in User personalization scope, toggle into it.
protected void RadioButton1_CheckedChanged(object sender, EventArgs e)
{
if (_manager.Personalization.Scope == PersonalizationScope.Shared)
_manager.Personalization.ToggleScope();
}
// If not in Shared scope, and if user is allowed, toggle the scope.
protected void RadioButton2_CheckedChanged(object sender, EventArgs e)
{
if (_manager.Personalization.CanEnterSharedScope &&
_manager.Personalization.Scope == PersonalizationScope.User)
_manager.Personalization.ToggleScope();
}
</script>
<div>
<asp:Panel ID="Panel1" runat="server"
Borderwidth="1"
Width="230"
BackColor="lightgray"
Font-Names="Verdana, Arial, Sans Serif" >
<asp:Label ID="Label1" runat="server"
Text=" Display Mode"
Font-Bold="true"
Font-Size="8"
Width="120"
AssociatedControlID="DisplayModeDropdown"/>
<asp:DropDownList ID="DisplayModeDropdown" runat="server"
AutoPostBack="true"
Width="120"
OnSelectedIndexChanged="DisplayModeDropdown_SelectedIndexChanged" />
<asp:LinkButton ID="LinkButton1" runat="server"
Text="Reset User State"
ToolTip="Reset the current user's personalization data for the page."
Font-Size="8"
OnClick="LinkButton1_Click" />
<asp:Panel ID="Panel2" runat="server"
GroupingText="Personalization Scope"
Font-Bold="true"
Font-Size="8"
Visible="false" >
<asp:RadioButton ID="RadioButton1" runat="server"
Text="User"
AutoPostBack="true"
GroupName="Scope" OnCheckedChanged="RadioButton1_CheckedChanged" />
<asp:RadioButton ID="RadioButton2" runat="server"
Text="Shared"
AutoPostBack="true"
GroupName="Scope"
OnCheckedChanged="RadioButton2_CheckedChanged" />
</asp:Panel>
</asp:Panel>
</div>
<%@ control language="vb" classname="DisplayModeMenuVB"%>
<script runat="server">
' Use a field to reference the current WebPartManager.
Dim _manager As WebPartManager
Sub Page_Init(ByVal sender As Object, ByVal e As EventArgs)
AddHandler Page.InitComplete, AddressOf InitComplete
End Sub
Sub InitComplete(ByVal sender As Object, ByVal e As System.EventArgs)
_manager = WebPartManager.GetCurrentWebPartManager(Page)
Dim browseModeName As String = WebPartManager.BrowseDisplayMode.Name
' Fill the dropdown with the names of supported display modes.
Dim mode As WebPartDisplayMode
For Each mode In _manager.SupportedDisplayModes
Dim modeName As String = mode.Name
' Make sure a mode is enabled before adding it.
If mode.IsEnabled(_manager) Then
Dim item As New ListItem(modeName, modeName)
DisplayModeDropdown.Items.Add(item)
End If
Next mode
' If shared scope is allowed for this user, display the scope-switching
' UI and select the appropriate radio button for the current user scope.
If _manager.Personalization.CanEnterSharedScope Then
Panel2.Visible = True
If _manager.Personalization.Scope = PersonalizationScope.User Then
RadioButton1.Checked = True
Else
RadioButton2.Checked = True
End If
End If
End Sub
' Change the page to the selected display mode.
Sub DisplayModeDropdown_SelectedIndexChanged(ByVal sender As Object, _
ByVal e As EventArgs)
Dim selectedMode As String = DisplayModeDropdown.SelectedValue
Dim mode As WebPartDisplayMode = _
_manager.SupportedDisplayModes(selectedMode)
If Not (mode Is Nothing) Then
_manager.DisplayMode = mode
End If
End Sub
' Set the selected item equal to the current display mode.
Sub Page_PreRender(ByVal sender As Object, ByVal e As EventArgs)
Dim items As ListItemCollection = DisplayModeDropdown.Items
Dim selectedIndex As Integer = _
items.IndexOf(items.FindByText(_manager.DisplayMode.Name))
DisplayModeDropdown.SelectedIndex = selectedIndex
End Sub
' Reset all of a user's personalization data for the page.
Protected Sub LinkButton1_Click(ByVal sender As Object, _
ByVal e As EventArgs)
_manager.Personalization.ResetPersonalizationState()
End Sub
' If not in User personalization scope, toggle into it.
Protected Sub RadioButton1_CheckedChanged(ByVal sender As Object, _
ByVal e As EventArgs)
If _manager.Personalization.Scope = PersonalizationScope.Shared Then
_manager.Personalization.ToggleScope()
End If
End Sub
' If not in Shared scope, and if user is allowed, toggle the scope.
Protected Sub RadioButton2_CheckedChanged(ByVal sender As Object, _
ByVal e As EventArgs)
If _manager.Personalization.CanEnterSharedScope AndAlso _
_manager.Personalization.Scope = PersonalizationScope.User Then
_manager.Personalization.ToggleScope()
End If
End Sub
</script>
<div>
<asp:Panel ID="Panel1" runat="server"
Borderwidth="1"
Width="230"
BackColor="lightgray"
Font-Names="Verdana, Arial, Sans Serif" >
<asp:Label ID="Label1" runat="server"
Text=" Display Mode"
Font-Bold="true"
Font-Size="8"
Width="120"
AssociatedControlID="DisplayModeDropdown"/>
<asp:DropDownList ID="DisplayModeDropdown" runat="server"
AutoPostBack="true"
Width="120"
OnSelectedIndexChanged="DisplayModeDropdown_SelectedIndexChanged" />
<asp:LinkButton ID="LinkButton1" runat="server"
Text="Reset User State"
ToolTip="Reset the current user's personalization data for the page."
Font-Size="8"
OnClick="LinkButton1_Click" />
<asp:Panel ID="Panel2" runat="server"
GroupingText="Personalization Scope"
Font-Bold="true"
Font-Size="8"
Visible="false" >
<asp:RadioButton ID="RadioButton1" runat="server"
Text="User"
AutoPostBack="true"
GroupName="Scope" OnCheckedChanged="RadioButton1_CheckedChanged" />
<asp:RadioButton ID="RadioButton2" runat="server"
Text="Shared"
AutoPostBack="true"
GroupName="Scope"
OnCheckedChanged="RadioButton2_CheckedChanged" />
</asp:Panel>
</asp:Panel>
</div>
A segunda parte do exemplo de código é o código-fonte para a interface e os controles. O arquivo de origem contém uma interface simples chamada IZipCode
. Também há uma WebPart classe chamada ZipCodeWebPart
que implementa a interface e atua como o controle do provedor. A outra WebPart classe é denominada WeatherWebPart
e atua como consumidor da conexão. Essa classe tem um método chamado GetZipCode
que obtém uma instância da IZipCode
interface do controle de provedor. Observe que esse método é marcado como o método de ponto de conexão do consumidor com um ConnectionConsumer
atributo em seus metadados. Esse é o mecanismo para identificar o método de ponto de conexão no controle do consumidor.
Para que o exemplo de código seja executado, você deve compilar esse código-fonte. Você pode compilá-lo explicitamente e colocar o assembly resultante na pasta Bin do site ou no cache de assembly global. Como alternativa, você pode colocar o código-fonte na pasta App_Code do site, na qual ele será compilado dinamicamente em tempo de execução. Este exemplo de código usa compilação dinâmica. Para obter um passo a passo que demonstra como compilar, consulte Passo a passo : desenvolvendo e usando um controle de servidor Web personalizado.
namespace Samples.AspNet.CS.Controls
{
using System;
using System.Web;
using System.Web.Security;
using System.Security.Permissions;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
[AspNetHostingPermission(SecurityAction.Demand,
Level = AspNetHostingPermissionLevel.Minimal)]
[AspNetHostingPermission(SecurityAction.InheritanceDemand,
Level = AspNetHostingPermissionLevel.Minimal)]
public interface IZipCode
{
string ZipCode { get; set;}
}
[AspNetHostingPermission(SecurityAction.Demand,
Level = AspNetHostingPermissionLevel.Minimal)]
[AspNetHostingPermission(SecurityAction.InheritanceDemand,
Level = AspNetHostingPermissionLevel.Minimal)]
public class ZipCodeWebPart : WebPart, IZipCode
{
string zipCodeText = String.Empty;
TextBox input;
Button send;
public ZipCodeWebPart()
{
}
// Make the implemented property personalizable to save
// the Zip Code between browser sessions.
[Personalizable()]
public virtual string ZipCode
{
get { return zipCodeText; }
set { zipCodeText = value; }
}
// This is the callback method that returns the provider.
[ConnectionProvider("Zip Code Provider", "ZipCodeProvider")]
public IZipCode ProvideIZipCode()
{
return this;
}
protected override void CreateChildControls()
{
Controls.Clear();
input = new TextBox();
this.Controls.Add(input);
send = new Button();
send.Text = "Enter 5-digit Zip Code";
send.Click += new EventHandler(this.submit_Click);
this.Controls.Add(send);
}
private void submit_Click(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(input.Text))
{
zipCodeText = Page.Server.HtmlEncode(input.Text);
input.Text = String.Empty;
}
}
}
[AspNetHostingPermission(SecurityAction.Demand,
Level = AspNetHostingPermissionLevel.Minimal)]
[AspNetHostingPermission(SecurityAction.InheritanceDemand,
Level = AspNetHostingPermissionLevel.Minimal)]
public class WeatherWebPart : WebPart
{
private IZipCode _provider;
string _zipSearch;
Label DisplayContent;
// This method is identified by the ConnectionConsumer
// attribute, and is the mechanism for connecting with
// the provider.
[ConnectionConsumer("Zip Code Consumer", "ZipCodeConsumer")]
public void GetIZipCode(IZipCode Provider)
{
_provider = Provider;
}
protected override void OnPreRender(EventArgs e)
{
EnsureChildControls();
if (this._provider != null)
{
_zipSearch = _provider.ZipCode.Trim();
DisplayContent.Text = "My Zip Code is: " + _zipSearch;
}
}
protected override void CreateChildControls()
{
Controls.Clear();
DisplayContent = new Label();
this.Controls.Add(DisplayContent);
}
}
}
Imports System.Web
Imports System.Web.Security
Imports System.Security.Permissions
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Web.UI.WebControls.WebParts
Namespace Samples.AspNet.VB.Controls
<AspNetHostingPermission(SecurityAction.Demand, _
Level:=AspNetHostingPermissionLevel.Minimal)> _
<AspNetHostingPermission(SecurityAction.InheritanceDemand, _
Level:=AspNetHostingPermissionLevel.Minimal)> _
Public Interface IZipCode
Property ZipCode() As String
End Interface
<AspNetHostingPermission(SecurityAction.Demand, _
Level:=AspNetHostingPermissionLevel.Minimal)> _
<AspNetHostingPermission(SecurityAction.InheritanceDemand, _
Level:=AspNetHostingPermissionLevel.Minimal)> _
Public Class ZipCodeWebPart
Inherits WebPart
Implements IZipCode
Private zipCodeText As String = String.Empty
Private input As TextBox
Private send As Button
Public Sub New()
End Sub
' Make the implemented property personalizable to save
' the Zip Code between browser sessions.
<Personalizable()> _
Public Property ZipCode() As String _
Implements IZipCode.ZipCode
Get
Return zipCodeText
End Get
Set(ByVal value As String)
zipCodeText = value
End Set
End Property
' This is the callback method that returns the provider.
<ConnectionProvider("Zip Code Provider", "ZipCodeProvider")> _
Public Function ProvideIZipCode() As IZipCode
Return Me
End Function
Protected Overrides Sub CreateChildControls()
Controls.Clear()
input = New TextBox()
Me.Controls.Add(input)
send = New Button()
send.Text = "Enter 5-digit Zip Code"
AddHandler send.Click, AddressOf Me.submit_Click
Me.Controls.Add(send)
End Sub
Private Sub submit_Click(ByVal sender As Object, _
ByVal e As EventArgs)
If input.Text <> String.Empty Then
zipCodeText = Page.Server.HtmlEncode(input.Text)
input.Text = String.Empty
End If
End Sub
End Class
<AspNetHostingPermission(SecurityAction.Demand, _
Level:=AspNetHostingPermissionLevel.Minimal)> _
<AspNetHostingPermission(SecurityAction.InheritanceDemand, _
Level:=AspNetHostingPermissionLevel.Minimal)> _
Public Class WeatherWebPart
Inherits WebPart
Private _provider As IZipCode
Private _zipSearch As String
Private DisplayContent As Label
' This method is identified by the ConnectionConsumer
' attribute, and is the mechanism for connecting with
' the provider.
<ConnectionConsumer("Zip Code Consumer", "ZipCodeConsumer")> _
Public Sub GetIZipCode(ByVal Provider As IZipCode)
_provider = Provider
End Sub
Protected Overrides Sub OnPreRender(ByVal e As EventArgs)
EnsureChildControls()
If Not (Me._provider Is Nothing) Then
_zipSearch = _provider.ZipCode.Trim()
DisplayContent.Text = "My Zip Code is: " + _zipSearch
End If
End Sub
Protected Overrides Sub CreateChildControls()
Controls.Clear()
DisplayContent = New Label()
Me.Controls.Add(DisplayContent)
End Sub
End Class
End Namespace
A terceira parte do exemplo de código é a página da Web. Na parte superior estão Register
diretivas para registrar os controles personalizados que formam a conexão e o controle de usuário que permite que os usuários alterem os modos de exibição na página. A conexão em si é criada declarativamente dentro do <staticconnections>
elemento na página. Isso demonstra uma maneira de criar uma conexão – observe o ConsumerConnectionPointID
atributo no <asp:webpartconnection>
elemento . Você também pode criar a conexão programaticamente; o código para fazer isso está no Button1_Click
método . Nesse caso, um ConsumerConnectionPoint objeto é criado e, em seguida, passado para um método que cria a conexão real. Se a conexão for criada declarativamente ou programaticamente, os pontos de conexão sempre devem ser especificados para o provedor e o consumidor. O Button2_Click
método acessa os ConnectionPoint objetos para o provedor e o consumidor e grava alguns de seus valores de propriedade em um rótulo na página.
<%@ Page Language="C#" %>
<%@ register tagprefix="uc1"
tagname="DisplayModeMenuCS"
src="~/displaymodemenucs.ascx" %>
<%@ Register TagPrefix="aspSample"
Namespace="Samples.AspNet.CS.Controls" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
protected void Button1_Click(object sender, EventArgs e)
{
ProviderConnectionPoint provPoint =
mgr.GetProviderConnectionPoints(zip1)["ZipCodeProvider"];
ConsumerConnectionPoint connPoint =
mgr.GetConsumerConnectionPoints(weather1)["ZipCodeConsumer"];
if(mgr.CanConnectWebParts(zip1, provPoint, weather1, connPoint))
mgr.ConnectWebParts(zip1, provPoint, weather1, connPoint);
}
protected void Button2_Click(object sender, EventArgs e)
{
WebPartConnection conn = mgr.Connections[0];
lblConn.Text = "<h2>Connection Point Details</h2>" +
"<h3>Provider Connection Point</h3>" +
" Display name: " + conn.ProviderConnectionPoint.DisplayName +
"<br />" +
" ID: " + conn.ProviderConnectionPoint.ID +
"<br />" +
" Interface type: " +
conn.ProviderConnectionPoint.InterfaceType.ToString() +
"<br />" +
" Control type: " + conn.ProviderConnectionPoint.ControlType.ToString() +
"<br />" +
" Allows multiple connections: " +
conn.ProviderConnectionPoint.AllowsMultipleConnections.ToString() +
"<br />" +
" Enabled: " + conn.ProviderConnectionPoint.GetEnabled(zip1).ToString() +
"<hr />" +
"<h3>Consumer Connection Point</h3>" +
" Display name: " + conn.ConsumerConnectionPoint.DisplayName +
"<br />" +
" ID: " + conn.ConsumerConnectionPoint.ID +
"<br />" +
" Interface type: " + conn.ConsumerConnectionPoint.InterfaceType.ToString() +
"<br />" +
" Control type: " + conn.ConsumerConnectionPoint.ControlType.ToString() +
"<br />" +
" Allows multiple connections: " +
conn.ConsumerConnectionPoint.AllowsMultipleConnections.ToString() +
"<br />" +
" Enabled: " + conn.ConsumerConnectionPoint.GetEnabled(zip1).ToString();
}
protected void Page_Load(object sender, EventArgs e)
{
lblConn.Text = String.Empty;
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:WebPartManager ID="mgr" runat="server" >
<StaticConnections>
<asp:WebPartConnection ID="conn1"
ConsumerConnectionPointID="ZipCodeConsumer"
ConsumerID="weather1"
ProviderConnectionPointID="ZipCodeProvider"
ProviderID="zip1" />
</StaticConnections>
</asp:WebPartManager>
<uc1:displaymodemenucs id="menu1" runat="server" />
<asp:WebPartZone ID="WebPartZone1" runat="server">
<ZoneTemplate>
<aspSample:ZipCodeWebPart ID="zip1" runat="server"
Title="Zip Code Provider" />
<aspSample:WeatherWebPart ID="weather1" runat="server"
Title="Zip Code Consumer" />
</ZoneTemplate>
</asp:WebPartZone>
<asp:ConnectionsZone ID="ConnectionsZone1" runat="server">
</asp:ConnectionsZone>
<asp:Button ID="Button1" runat="server"
Text="Dynamic Connection"
OnClick="Button1_Click" />
<br />
<asp:Button ID="Button2" runat="server"
Text="Connection Point Details"
OnClick="Button2_Click" />
<br />
<asp:Label ID="lblConn" runat="server" />
</div>
</form>
</body>
</html>
<%@ Page Language="VB" %>
<%@ register tagprefix="uc1"
tagname="DisplayModeMenuVB"
src="~/displaymodemenuvb.ascx" %>
<%@ Register TagPrefix="aspSample"
Namespace="Samples.AspNet.VB.Controls" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
Protected Sub Button1_Click(ByVal sender As Object, _
ByVal e As System.EventArgs)
Dim provPoint As ProviderConnectionPoint = _
mgr.GetProviderConnectionPoints(zip1)("ZipCodeProvider")
Dim connPoint As ConsumerConnectionPoint = _
mgr.GetConsumerConnectionPoints(weather1)("ZipCodeConsumer")
If mgr.CanConnectWebParts(zip1, provPoint, weather1, connPoint) Then
mgr.ConnectWebParts(zip1, provPoint, weather1, connPoint)
End If
End Sub
Protected Sub Button2_Click(ByVal sender As Object, _
ByVal e As System.EventArgs)
Dim conn As WebPartConnection = mgr.Connections(0)
lblConn.Text = "<h2>Connection Point Details</h2>" & _
"<h3>Provider Connection Point</h3>" & _
" Display name: " & conn.ProviderConnectionPoint.DisplayName & _
"<br />" & _
" ID: " & conn.ProviderConnectionPoint.ID & _
"<br />" & _
" Interface type: " & conn.ProviderConnectionPoint.InterfaceType.ToString() & _
"<br />" & _
" Control type: " & conn.ProviderConnectionPoint.ControlType.ToString() & _
"<br />" & _
" Allows multiple connections: " & _
conn.ProviderConnectionPoint.AllowsMultipleConnections.ToString() & _
"<br />" & _
" Enabled: " & conn.ProviderConnectionPoint.GetEnabled(zip1).ToString() & _
"<hr />" & _
"<h3>Consumer Connection Point</h3>" & _
" Display name: " & conn.ConsumerConnectionPoint.DisplayName & _
"<br />" & _
" ID: " & conn.ConsumerConnectionPoint.ID & _
"<br />" & _
" Interface type: " & conn.ConsumerConnectionPoint.InterfaceType.ToString() & _
"<br />" & _
" Control type: " & conn.ConsumerConnectionPoint.ControlType.ToString() & _
"<br />" & _
" Allows multiple connections: " & _
conn.ConsumerConnectionPoint.AllowsMultipleConnections.ToString() & _
"<br />" & _
" Enabled: " & conn.ConsumerConnectionPoint.GetEnabled(zip1).ToString()
End Sub
Protected Sub Page_Load(ByVal sender As Object, _
ByVal e As System.EventArgs)
lblConn.Text = String.Empty
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:WebPartManager ID="mgr" runat="server" >
<StaticConnections>
<asp:WebPartConnection ID="conn1"
ConsumerConnectionPointID="ZipCodeConsumer"
ConsumerID="weather1"
ProviderConnectionPointID="ZipCodeProvider"
ProviderID="zip1" />
</StaticConnections>
</asp:WebPartManager>
<uc1:displaymodemenuvb id="menu1" runat="server" />
<asp:WebPartZone ID="WebPartZone1" runat="server">
<ZoneTemplate>
<aspSample:ZipCodeWebPart ID="zip1" runat="server"
Title="Zip Code Provider" />
<aspSample:WeatherWebPart ID="weather1" runat="server"
Title="Zip Code Consumer" />
</ZoneTemplate>
</asp:WebPartZone>
<asp:ConnectionsZone ID="ConnectionsZone1" runat="server">
</asp:ConnectionsZone>
<asp:Button ID="Button1" runat="server"
Text="Dynamic Connection"
OnClick="Button1_Click" />
<br />
<asp:Button ID="Button2" runat="server"
Text="Connection Point Details"
OnClick="Button2_Click" />
<br />
<asp:Label ID="lblConn" runat="server" />
</div>
</form>
</body>
</html>
Depois de carregar a página em um navegador, clique no botão Detalhes do Ponto de Conexão . As informações sobre os pontos de conexão do provedor e do consumidor estabelecidas na conexão declarativa são exibidas. Em seguida, use o controle suspenso Modo de Exibição para alternar a página para o modo de conexão. No menu de verbos do controle Provedor WebPart de CEP (representado por uma seta para baixo na barra de título), clique no verbo de conexão. A interface do usuário da conexão é exibida, criada automaticamente pelo <asp:connectionszone>
controle declarado na página. Essa é outra maneira de criar uma conexão (por meio da interface do usuário), juntamente com os métodos declarativos e programáticos discutidos anteriormente. Clique no botão Desconectar para encerrar a conexão estática existente. Clique no link Criar uma Conexão com um Consumidor . A interface do usuário agora exibe um controle suspenso que lista o nome de exibição do ponto de conexão do consumidor. Selecione o ponto de conexão na lista suspensa e clique em Conectar para concluir a conexão. Em seguida, clique em Desconectar novamente. Clique no botão Conexão Dinâmica para criar uma conexão programaticamente. Use o controle Modo de Exibição para retornar a página para o modo de navegação. Clique no botão Detalhes do Ponto de Conexão novamente para indicar detalhes sobre o objeto de ponto de conexão do consumidor mais uma vez.
O exemplo demonstrou o estabelecimento de uma conexão e o uso de um ponto de conexão do consumidor de três maneiras: uma conexão estática declarada na marcação de página da Web; uma conexão criada no código que usou um ConsumerConnectionPoint objeto e uma conexão criada por um usuário por meio da interface do usuário de conexão.
Comentários
Em cada conexão de Web Parts entre dois controles de servidor, cada controle deve ter (entre outros requisitos) um objeto de ponto de conexão associado que permita que ele se conecte ao outro controle e forneça ou consuma dados, dependendo se o controle é designado como o provedor ou consumidor para a conexão. Um ConnectionPoint objeto em geral contém os detalhes de como um controle pode se conectar a outro controle e o tipo de dados que ele pode compartilhar. Para um controle que atua como o consumidor em uma conexão, seu ponto de conexão deve ser um ConsumerConnectionPoint objeto . Para obter detalhes sobre conexões de Web Parts e pontos de conexão, leia os tópicos listados na seção Veja também abaixo.
Para criar um ConsumerConnectionPoint objeto, várias etapas são necessárias:
Habilite um controle de consumidor para fazer referência a uma instância de interface. Um WebPart ou outro controle de servidor (qualquer tipo de controle de servidor que será adicionado a uma WebPartZoneBase zona pode ser usado) deve ser capaz de consumir dados de uma instância de interface específica. O controle não precisa implementar a interface ; somente o provedor deve implementá-lo. O consumidor pode trabalhar com o tipo de interface exato atendido por um provedor ou, se não o fizer, um WebPartTransformer objeto pode ser usado para transformar dados do tipo de interface de um provedor em um tipo compreendido pelo consumidor. Uma maneira típica de habilitar um consumidor é declarar um campo privado para conter uma referência ao tipo de interface desejado.
Identifique um método de retorno de chamada. Um método no consumidor deve ser identificado como o método de retorno de chamada para estabelecer uma conexão com o provedor. Esse método recupera uma instância da interface que o provedor implementa e o atribui a (por exemplo) o campo privado criado na primeira etapa. A abordagem de Web Parts para identificar um método de retorno de chamada no consumidor é adicionar um
ConnectionConsumer
atributo de metadados (definido pela ConnectionConsumerAttribute classe ) ao método que recebe a instância de interface. Quando o atributo é adicionado, o único parâmetro necessário é um nome de exibição a ser usado para o ponto de conexão do consumidor. Parâmetros opcionais também podem ser adicionados, como uma ID.Processe e gere os dados da instância da interface. Execute qualquer processamento interno conforme necessário nos dados e, em seguida, normalmente, um controle de consumidor renderizará os dados para a página. Uma maneira comum de fazer isso é substituir o método do OnPreRender controle.
Observação
Durante uma solicitação síncrona, um consumidor deve solicitar dados diretamente do provedor durante ou imediatamente após o PreRender evento. Durante uma solicitação assíncrona, se o método de retorno de chamada do provedor não for chamado em nenhum momento durante a renderização, o desenvolvedor poderá assumir que nenhum dado foi enviado ao consumidor.
Depois que um controle tiver sido equipado para atuar como consumidor, o controle poderá participar de conexões (supondo que um controle de provedor também esteja equipado e disponível). Para criar uma conexão estática e declarativa na marcação de uma página da Web, os desenvolvedores podem usar o <asp:webpartconnection>
elemento . Se o ConnectionConsumer
atributo no código-fonte do consumidor que identifica o método de retorno de chamada especificar uma ID para o ponto de conexão, esse valor deverá ser atribuído ao ConsumerConnectionPointID
atributo no elemento em <asp:webpartconnection>
uma página. Um motivo pelo qual um desenvolvedor pode especificar uma ID para um ponto de conexão do consumidor é se houver vários pontos de conexão definidos no controle do consumidor. Se uma ID não for especificada para o ponto de conexão do consumidor no controle do consumidor, um valor também não precisará ser atribuído ao ConsumerConnectionPointID
atributo na página, pois a conexão será criada usando um valor padrão obtido do DefaultID campo.
Para criar uma conexão no código, os desenvolvedores devem criar um novo ConsumerConnectionPoint objeto chamando o GetConsumerConnectionPoints método e passando para ele a ID do controle do consumidor, juntamente com a ID ou o índice do objeto definido ConsumerConnectionPoint no controle do consumidor. O objeto retornado ConsumerConnectionPoint , juntamente com uma referência ao controle do consumidor, uma referência ao controle de provedor e um objeto correspondente ProviderConnectionPoint , são todos passados para o ConnectWebParts método para criar um novo WebPartConnection objeto.
Embora os desenvolvedores possam usar pontos de conexão do consumidor como parte do estabelecimento de conexões de forma declarativa ou programática, os usuários também podem interagir com pontos de conexão do consumidor para estabelecer conexões por meio da interface do usuário. Se os desenvolvedores declaram um ConnectionsZone controle em uma página da Web, ele fornece uma interface do usuário em tempo de execução para os usuários criarem conexões. Se os usuários escolherem o controle do provedor como o ponto de partida para estabelecer a conexão clicando em seu verbo de conexão (eles também podem escolher o consumidor; não há diferença na conexão resultante), na interface do usuário, eles verão um controle de lista suspensa com os nomes de exibição do ponto de conexão do consumidor disponível (ou pontos, se houver vários) para os quais o provedor poderá enviar os dados. Os usuários devem selecionar um ponto de conexão do consumidor para estabelecer uma conexão.
Um ConsumerConnectionPoint objeto associa-se diretamente a um controle de consumidor específico e armazena detalhes sobre uma conexão nas propriedades herdadas da classe base ConnectionPoint . Por exemplo, na propriedade herdada InterfaceType , um ponto de conexão do consumidor mantém o tipo de interface que usa. Se o provedor e o consumidor em uma conexão entenderem o tipo de interface, os controles serão compatíveis e capazes de formar uma conexão direta. Se o provedor e o consumidor não puderem trabalhar com o mesmo tipo de interface, eles serão incompatíveis e deverão usar um WebPartTransformer objeto para converter a propriedade do ponto de conexão do InterfaceType provedor em um tipo com o qual o consumidor possa trabalhar. Outra propriedade herdada importante é a DisplayName propriedade , que fornece um nome amigável a ser exibido na interface do usuário para que os usuários escolham um ponto de conexão do consumidor ao criar conexões. O nome de exibição é o parâmetro necessário quando os desenvolvedores adicionam um ConnectionConsumer
atributo ao método de retorno de chamada em um controle de consumidor. A propriedade herdada ID também é útil, conforme indicado acima, porque fornece um identificador exclusivo para um ponto de conexão do consumidor no caso de um consumidor ter vários pontos de conexão. Um consumidor pode ter vários ConsumerConnectionPoint objetos definidos nele e, nesse caso, quando os desenvolvedores adicionam o ConnectionConsumer
atributo a um método, eles devem especificar um valor de ID para distinguir cada ponto de conexão. Uma outra propriedade herdada notável é a AllowsMultipleConnections propriedade , que indica se um ponto de conexão do consumidor pode se conectar simultaneamente a vários provedores. Esse valor de propriedade é false
, por padrão, para pontos de conexão do consumidor (enquanto o padrão é para true
pontos de conexão do provedor).
A ConsumerConnectionPoint classe adiciona vários métodos exclusivos aos membros herdados da ConnectionPoint classe . O SetObject método invoca o próprio método de retorno de chamada definido do consumidor para recuperar a instância de interface do provedor. O SupportsConnection método retorna um valor booliano que indica se o ponto de conexão é capaz de estabelecer conexões, com base no estado atual do controle de consumidor associado.
Construtores
ConsumerConnectionPoint(MethodInfo, Type, Type, String, String, Boolean) |
Inicializa uma nova instância da classe ConsumerConnectionPoint. |
Propriedades
AllowsMultipleConnections |
Obtém um valor que indica se um ponto de conexão é compatível com várias conexões simultâneas. (Herdado de ConnectionPoint) |
ControlType |
Obtém o Type do controle do servidor ao qual um ponto de conexão é associado. (Herdado de ConnectionPoint) |
DisplayName |
Obtém uma cadeia de caracteres que funciona como um nome de exibição amigável para representar um ponto de conexão na IU (interface do usuário). (Herdado de ConnectionPoint) |
ID |
Obtém uma cadeia de caracteres que contém o identificador para um ponto de conexão. (Herdado de ConnectionPoint) |
InterfaceType |
Obtém o tipo da interface usada por um ponto de conexão. (Herdado de ConnectionPoint) |
Métodos
Equals(Object) |
Determina se o objeto especificado é igual ao objeto atual. (Herdado de Object) |
GetEnabled(Control) |
Retorna um valor que indica se um ponto de conexão pode participar de conexões. (Herdado de ConnectionPoint) |
GetHashCode() |
Serve como a função de hash padrão. (Herdado de Object) |
GetType() |
Obtém o Type da instância atual. (Herdado de Object) |
MemberwiseClone() |
Cria uma cópia superficial do Object atual. (Herdado de Object) |
SetObject(Control, Object) |
Invoca o método de retorno de chamada em um controle do consumidor e recupera a instância da interface de um controle do provedor. |
SupportsConnection(Control, ConnectionInterfaceCollection) |
Determina se um ponto de conexão do consumidor é atualmente capaz de estabelecer uma conexão. |
ToString() |
Retorna uma cadeia de caracteres que representa o objeto atual. (Herdado de Object) |