WebPartConnection Classe
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Fornece um objeto que permite que dois WebPart controlos formem uma ligação. Esta classe não pode ser herdada.
public ref class WebPartConnection sealed
[System.ComponentModel.TypeConverter(typeof(System.ComponentModel.ExpandableObjectConverter))]
public sealed class WebPartConnection
[<System.ComponentModel.TypeConverter(typeof(System.ComponentModel.ExpandableObjectConverter))>]
type WebPartConnection = class
Public NotInheritable Class WebPartConnection
- Herança
-
WebPartConnection
- Atributos
Exemplos
O exemplo de código seguinte demonstra como criar uma ligação simples entre dois WebPart controlos. O exemplo demonstra três formas de formar uma ligação: declarativamente, colocando etiquetas para a ligação na marcação da página Web; programaticamente, criando a ligação em código; e através da interface, colocando um ConnectionsZone controlo na página, que permite aos utilizadores estabelecer uma ligação.
O exemplo de código tem quatro partes:
Um controlo de utilizador que permite alterar o modo de exibição das Web Parts numa página.
Código-fonte para uma interface e dois WebPart controlos que atuam como fornecedor e consumidor para uma ligação.
Uma página Web para alojar todos os controlos e executar o exemplo de código.
Uma explicação de como executar a página de exemplo.
A primeira parte deste exemplo de código é o controlo do utilizador que permite aos utilizadores alterar modos de visualização numa página Web. Guarde o seguinte código-fonte num ficheiro .ascx, atribuindo-lhe o nome do ficheiro atribuído ao Src atributo da Register diretiva para este controlo de utilizador, que está perto do topo da página web de alojamento. Para detalhes sobre modos de visualização e uma descrição do código-fonte neste controlo, consulte Walkthrough: Changing Display Modes on a Web Parts Page.
<%@ 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 do código é o código-fonte da interface e dos controlos. O ficheiro fonte contém uma interface simples chamada IZipCode. Existe também uma WebPart classe chamada ZipCodeWebPart que implementa a interface e atua como controlo do fornecedor. O seu método é o método de ProvideIZipCode callback que implementa o único membro da interface. O método simplesmente devolve uma instância da interface. Note que o método está marcado com um ConnectionProvider atributo nos seus metadados. Este é o mecanismo para identificar o método como método de callback para o ponto de ligação do fornecedor. A outra WebPart classe chama-se WeatherWebPart, e atua como consumidor para a ligação. Esta classe tem um método chamado GetZipCode que obtém uma instância da IZipCode interface do controlo do fornecedor. Note que este método está marcado como o método do ponto de ligação do consumidor com um ConnectionConsumer atributo nos seus metadados.
Para que o exemplo de código seja executado, tens de compilar este código-fonte. Pode compilar explicitamente e colocar o assembly resultante na pasta Bin do seu site ou na cache global assembly. Alternativamente, pode colocar o código-fonte na pasta App_Code do seu site, onde será compilado dinamicamente em tempo de execução. Este exemplo de código utiliza compilação dinâmica. Para um guia que demonstra como compilar, consulte Guia: Desenvolvimento e Utilização de um Controlo 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 do código é a página Web. Perto do topo estão as Register diretivas para o controlo do utilizador e os controlos personalizados WebPart . Como o exemplo assume uma compilação dinâmica dos controlos, o código-fonte dos controlos deve estar numa App_Code subpasta; a Register etiqueta na página refere-se apenas a um prefixo de etiqueta arbitrário e ao espaço de nomes dos controlos. Os controlos personalizados WebPart (do fornecedor e do consumidor) são definidos dentro do elemento da <asp:webpartzone> página, dentro de um <zonetemplate> elemento.
A página fornece três formas de criar uma ligação entre os controlos personalizados. O primeiro método é declarativo. Na marcação da página, é declarado um <StaticConnections> elemento, e dentro dele é um <asp:WebPartConnections> elemento, com os vários detalhes do consumidor e do fornecedor da ligação especificados como atributos. Esta é uma forma de criar uma ligação, declarando-a diretamente na página, especificamente dentro do <asp:WebPartManager> elemento. Devido a esta ligação estática, uma ligação entre os dois controlos personalizados é criada imediatamente na primeira carga da página.
Um segundo método para formar uma ligação entre os controlos é fornecido pelo <asp:connectionszone> elemento na página. Se um utilizador mudar uma página para o modo de exibição connect em tempo de execução e clicar num verbo connect num dos controlos personalizados, o <asp:connectionszone> elemento renderiza automaticamente a interface para criar uma ligação.
A página também demonstra uma terceira forma de criar uma ligação, que é fazê-lo programaticamente. No Button1_Click método, o código cria um ProviderConnectionPoint objeto para o controlo do fornecedor e recupera os detalhes do seu ponto de ligação chamando o GetProviderConnectionPoints método. Realiza uma tarefa semelhante para o controlo do consumidor, chamando o GetConsumerConnectionPoints sistema. Finalmente, cria o novo WebPartConnection objeto ao chamar o ConnectWebParts método no WebPartManager controlo.
<%@ 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"];
WebPartConnection conn1 = mgr.ConnectWebParts(zip1, provPoint,
weather1, connPoint);
}
protected void mgr_DisplayModeChanged(object sender,
WebPartDisplayModeEventArgs e)
{
if (mgr.DisplayMode == WebPartManager.ConnectDisplayMode)
Button1.Visible = true;
else
Button1.Visible = false;
}
</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"
OnDisplayModeChanged="mgr_DisplayModeChanged">
<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="Connect WebPart Controls"
OnClick="Button1_Click"
Visible="false" />
</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")
mgr.ConnectWebParts(zip1, provPoint, weather1, connPoint)
End Sub
Protected Sub mgr_DisplayModeChanged (ByVal sender as Object, _
ByVal e as WebPartDisplayModeEventArgs)
If mgr.DisplayMode Is WebPartManager.ConnectDisplayMode Then
Button1.Visible = True
Else
Button1.Visible = False
End If
End Sub
</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"
OnDisplayModeChanged="mgr_DisplayModeChanged">
<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="Connect WebPart Controls"
OnClick="Button1_Click"
Visible="false" />
</div>
</form>
</body>
</html>
Depois de carregar a página Web num navegador, a primeira ligação já existe porque está declarada dentro do <StaticConnections> elemento. Introduza algum texto no controlo do Fornecedor do Código Postal e será exibido no controlo do consumidor. De seguida, desligue os dois controlos. Usando o controlo de lista suspensa do Modo de Exibição , altere a página para modo de ligação de visualização. Clique no menu de verbos (representado por uma seta para baixo na barra de título) para cada um dos WebPart controlos, e repare que cada um tem uma opção de Conectar . Este é um verbo conectar, que aparece no menu de verbos apenas quando a página está em modo conectar. Clica no verbo conectar num dos controlos, e a interface de ligação fornecida pelo ConnectionsZone controlo aparece. Clica no botão de Desligar para terminar a ligação estática entre os controlos. Use o controlo do Modo de Exibição para devolver a página ao modo de navegação. Tente introduzir novamente um novo texto no fornecedor e note que, como os controlos estão desligados, o texto não atualiza no controlo do consumidor.
De seguida, use o mesmo método acima para voltar a colocar a página no modo de ligação de visualização. Clica num verbo connect num dos controlos. Clique no link Criar uma Ligação e use a interface fornecida pelo ConnectionsZone controlo para criar uma ligação entre os controlos. Este é o segundo método para criar uma ligação. Note que, assim que a ligação é formada, a última cadeia que introduziu no controlo do fornecedor (que não apareceu porque os controlos estavam desligados) aparece subitamente no consumidor, porque a ligação foi recriada. Clique no botão Desligar para terminar a ligação atual que acabou de criar. Volte a página para o modo de navegação. Introduza um novo texto no fornecedor para demonstrar que o texto não foi atualizado e que os controlos estão novamente desligados.
Volte a página para ligar o modo de visualização. Em vez de clicar num verbo conectar, clique no botão Connect WebPart Controls , que ilustra o terceiro método de formar uma ligação. Esta abordagem liga os controlos programaticamente num único passo simples, sem necessidade de usar o ConnectionsZone controlo. Note que, à medida que a ligação é criada, a última cadeia que introduziu no fornecedor aparece subitamente no controlo do consumidor.
Observações
No conjunto de controlos Web Parts, uma ligação é uma ligação ou associação entre dois WebPart controlos (ou outro servidor ou utilizador) que lhes permite partilhar dados. Esta capacidade de partilhar dados permite que os controlos conectados sejam usados de formas que excedem a funcionalidade oferecida pelos controlos isolados. Por exemplo, se um controlo fornecer dados de código postal, e outro controlo puder ler esses dados e fornecer informação meteorológica local com base no código postal, então a capacidade conectada dos dois controlos confere mais valor aos utilizadores. Para estender este exemplo, poderiam ser criados outros controlos que também exibissem informação baseada num código postal, como um controlo com ligações para notícias locais, e todos estes controlos que podem trabalhar com dados de códigos postais poderiam partilhar dados com o único controlo que fornece o código postal. Os utilizadores finais de aplicações Web Parts podem criar e gerir ligações entre todos estes controlos compatíveis diretamente a partir de um navegador Web, usando a interface de utilizador (UI) padrão de conexões fornecida pelo ConnectionsZone controlo, ou usando uma interface personalizada fornecida por um programador.
Esta WebPartConnection visão geral da aula é uma exposição geral dos detalhes básicos para criar uma ligação. Para mais informações sobre componentes específicos e requisitos envolvidos na criação de ligações, consulte Web Parts Connections Overview, ou consulte as classes de referência e exemplos de código mencionados na discussão seguinte. Existem vários aspetos fundamentais de uma ligação com Web Parts:
Dois WebPart controlos. Cada ligação Web Parts consiste em dois controlos. É possível que um controlo participe em mais do que uma ligação simultaneamente, mas cada ligação consiste exatamente em dois controlos. Os controlos podem derivar diretamente da classe base WebPart, ou podem ser outros controlos de servidor, incluindo controlos ASP.NET, controlos personalizados de servidor e controlos de utilizador. Controlos que não derivam da WebPart classe, se colocados numa WebPartZoneBase zona, são automaticamente encapsulados com um GenericWebPart objeto em tempo de execução, o que lhes permite herdar da WebPart classe e funcionar como controlos em tempo WebPart de execução.
Controlos que residem em WebPartZoneBase zonas. Ambos WebPart os controlos e qualquer outro tipo de controlo de servidor devem residir numa WebPartZoneBase zona para poder participar nas ligações Web Parts (e na maioria das outras funcionalidades Web Parts).
Consumidores e prestadores de serviços. Em cada ligação a Web Parts existem dois controlos: um fornecedor de dados e um consumidor de dados. O fornecedor fornece dados ao consumidor através de um método de callback especificado que devolve dados sob a forma de uma interface. (Para um exemplo de como criar e especificar o método de callback, veja a secção Exemplo deste tópico.) Este método de retorno de chamada é conhecido como ponto de ligação de fornecedor. Os detalhes deste ponto de ligação (o seu nome "amigo", um ID e o tipo da interface devolvida) estão contidos num ProviderConnectionPoint objeto associado ao controlo do fornecedor. O consumidor recebe os dados através de um método especificado que pode aceitar uma instância da interface. Este método é conhecido como ponto de ligação do consumidor, e os detalhes do ponto de ligação (nome, ID e tipo de interface) estão contidos num ConsumerConnectionPoint objeto associado ao controlo do consumidor.
Controlos compatíveis ou um transformador válido. Para que uma ligação funcione, o consumidor e o fornecedor devem ser ou compatíveis (ou seja, os métodos de pontos de ligação especificados podem funcionar com o mesmo tipo de interface), ou deve existir um WebPartTransformer objeto capaz de traduzir o tipo oferecido pelo fornecedor para um tipo compreendido pelo consumidor.
Um objeto WebPartConnection. Para existir uma ligação, deve existir uma instância da WebPartConnection classe que contenha referências aos controlos do fornecedor e consumidor, juntamente com os detalhes dos seus pontos de ligação. Se o fornecedor e o consumidor forem incompatíveis e, em vez disso, usarem um WebPartTransformer objeto para se ligar, a ligação faz referência ao transformador.
Um meio de estabelecer a ligação. Depois de os controlos compatíveis do consumidor e do fornecedor terem sido devidamente desenhados com métodos de pontos de ligação e colocados numa zona, e um WebPartConnection objeto estar disponível, o último passo básico necessário é iniciar a ligação. Uma forma de isto acontecer é os utilizadores criarem a ligação através da interface. Se colocar um
<asp:connectionszone>elemento na página, e os outros componentes necessários para uma ligação estiverem no lugar, em tempo de execução o utilizador pode mudar a página para o modo de visualização de conexão, clicar num verbo de ligação no menu de verbos do fornecedor ou do consumidor, e aparecerá uma interface de interface de ligação (baseada no ConnectionsZone controlo). Através desta interface, o utilizador pode iniciar a ligação. Outra forma de iniciar a ligação é fazê-lo programaticamente. Em qualquer dos casos, seja através da interface ou programaticamente, o método subjacente que inicia a ligação é o mesmo. A aplicação chama o ConnectWebParts método (ou o ConnectWebParts método se estiver a usar um transformador) no WebPartManager controlo, passando-lhe o fornecedor, o consumidor e os respetivos objetos de ligação, e o método devolve um WebPartConnection objeto.
A WebPartConnection classe define um objeto que encapsula os detalhes essenciais de uma ligação entre dois WebPart controlos. A classe consiste quase inteiramente em propriedades relacionadas com os detalhes de uma ligação particular. Várias propriedades estão sob controlo do consumidor numa relação. A Consumer propriedade refere-se ao próprio controlo do consumidor, e a ConsumerID propriedade refere-se à identificação do consumidor. O ConsumerConnectionPoint objeto, que contém os detalhes do ponto de ligação do consumidor, é referenciado pela propriedade do ConsumerConnectionPoint consumidor. A ConsumerConnectionPointID propriedade refere-se ao ID do ConsumerConnectionPoint objeto. Todas estas propriedades de ligação relacionadas com o consumidor devem ter um valor atribuído para criar uma ligação.
A WebPartConnection classe também possui várias propriedades relacionadas com o controlo do fornecedor numa ligação, e estas correspondem às propriedades do consumidor. A Provider propriedade refere-se ao controlo do fornecedor, enquanto a ProviderID propriedade faz referência ao seu ID. A ProviderConnectionPoint propriedade refere-se ao ProviderConnectionPoint objeto, e a ProviderConnectionPointID propriedade refere-se ao ID do ponto de ligação do fornecedor.
Várias propriedades dizem respeito ao estado da ligação. A IsActive propriedade indica se a ligação está ativa (atualmente a trocar dados) ou inativa (ainda ligada mas sem partilhar dados ativamente). A IsShared propriedade indica se a ligação é partilhada (disponível para todos os utilizadores de uma página) ou específica de cada utilizador, e indica IsStatic se o controlo é estático (declarado na marcação da página e, portanto, permanente) ou dinâmico (criado programaticamente, o que significa que pode ser eliminado).
Construtores
| Name | Description |
|---|---|
| WebPartConnection() |
Inicializa uma nova instância da WebPartConnection classe. |
Propriedades
| Name | Description |
|---|---|
| Consumer |
Obtém um WebPart objeto que atua como controlo do consumidor numa ligação. |
| ConsumerConnectionPoint |
Obtém o objeto que serve de ponto de ligação para um controlo que atua como consumidor numa ligação. |
| ConsumerConnectionPointID |
Obtém ou define o valor da propriedade numa ligação que faz referência ao ID do objeto que serve como ponto de ligação do consumidor para essa ligação. |
| ConsumerID |
Obtém ou define o valor da propriedade numa ligação que faz referência ao ID do WebPart controlo que atua como consumidor dessa ligação. |
| ID |
Obtém ou define o ID de um WebPartConnection objeto. |
| IsActive |
Obtém um valor que indica se um WebPartConnection objeto está atualmente estabelecido e capaz de trocar dados entre o seu fornecedor e os controlos do consumidor. |
| IsShared |
Recebe um valor que indica se um WebPartConnection objeto é visível para todos os utilizadores ou apenas para o utilizador atual. |
| IsStatic |
Recebe um valor que indica se um WebPartConnection objeto está declarado na marcação de uma página Web ou criado programaticamente. |
| Provider |
Recebe um WebPart controlo que atua como fornecedor numa ligação Web Parts. |
| ProviderConnectionPoint |
Obtém o objeto que serve como ponto de ligação para um WebPart controlo, atuando como fornecedor para uma ligação. |
| ProviderConnectionPointID |
Obtém ou define o valor da propriedade numa ligação que faz referência ao ID do objeto que serve como ponto de ligação fornecedor para essa ligação. |
| ProviderID |
Obtém ou define o valor da propriedade numa ligação que faz referência ao ID do WebPart controlo que atua como fornecedor dessa ligação. |
| Transformer |
Obtém um WebPartTransformer objeto que é usado para transformar dados entre dois pontos de ligação que, de outra forma, seriam incompatíveis numa ligação Web Parts. |
| Transformers |
Obtém uma coleção de WebPartTransformer objetos usados internamente pelo conjunto de controlo Web Parts. |
Métodos
| Name | Description |
|---|---|
| Equals(Object) |
Determina se o objeto especificado é igual ao objeto atual. (Herdado de Object) |
| GetHashCode() |
Serve como função de hash predefinida. (Herdado de Object) |
| GetType() |
Obtém o Type da instância atual. (Herdado de Object) |
| MemberwiseClone() |
Cria uma cópia superficial do atual Object. (Herdado de Object) |
| ToString() |
Sobrepõe o método herdado ToString() e devolve um nome curto de tipo para o objeto de conexão. |