WebPartConnection Klasa
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Udostępnia obiekt, który umożliwia utworzenie połączenia z dwoma WebPart kontrolkami. Klasa ta nie może być dziedziczona.
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
- Dziedziczenie
-
WebPartConnection
- Atrybuty
Przykłady
W poniższym przykładzie kodu pokazano, jak utworzyć proste połączenie między dwoma WebPart kontrolkami. W przykładzie pokazano trzy sposoby tworzenia połączenia: deklaratywnie, umieszczając tagi dla połączenia na znacznikach strony sieci Web; programowo, tworząc połączenie w kodzie; i za pośrednictwem interfejsu użytkownika, umieszczając kontrolkę ConnectionsZone na stronie, co umożliwia użytkownikom nawiązywanie połączenia.
Przykładowy kod ma cztery części:
Kontrolka użytkownika, która umożliwia zmianę trybu wyświetlania składników Web Part na stronie.
Kod źródłowy interfejsu i dwie WebPart kontrolki działające jako dostawca i odbiorca połączenia.
Strona sieci Web do hostowania wszystkich kontrolek i uruchomienia przykładu kodu.
Wyjaśnienie sposobu uruchamiania przykładowej strony.
Pierwszą częścią tego przykładu kodu jest kontrolka użytkownika, która umożliwia użytkownikom zmienianie trybów wyświetlania na stronie sieci Web. Zapisz następujący kod źródłowy w pliku ascx, podając mu nazwę pliku przypisaną do Src
atrybutu Register
dyrektywy dla tej kontrolki użytkownika, która znajduje się w górnej części strony internetowej hostingu. Aby uzyskać szczegółowe informacje o trybach wyświetlania i opisie kodu źródłowego w tej kontrolce, zobacz Przewodnik: zmienianie trybów wyświetlania na stronie składników Web Part.
<%@ 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>
Drugą częścią przykładu kodu jest kod źródłowy interfejsu i kontrolek. Plik źródłowy zawiera prosty interfejs o nazwie IZipCode
. Istnieje również WebPart klasa o nazwie ZipCodeWebPart
, która implementuje interfejs i działa jako kontrolka dostawcy. Metoda ProvideIZipCode
jest metodą wywołania zwrotnego, która implementuje jedyny element członkowski interfejsu. Metoda po prostu zwraca wystąpienie interfejsu. Należy pamiętać, że metoda jest oznaczona atrybutem ConnectionProvider
w metadanych. Jest to mechanizm identyfikacji metody jako metody wywołania zwrotnego dla punktu połączenia dostawcy. Druga WebPart klasa ma nazwę WeatherWebPart
i działa jako odbiorca połączenia. Ta klasa ma metodę o nazwie GetZipCode
, która pobiera wystąpienie interfejsu IZipCode
z kontrolki dostawcy. Należy pamiętać, że ta metoda jest oznaczona jako metoda punktu połączenia odbiorcy z atrybutem ConnectionConsumer
w metadanych.
Aby przykład kodu został uruchomiony, należy skompilować ten kod źródłowy. Można je jawnie skompilować i umieścić wynikowy zestaw w folderze Bin witryny sieci Web lub globalnej pamięci podręcznej zestawów. Możesz też umieścić kod źródłowy w folderze App_Code witryny, w którym będzie dynamicznie kompilowany w czasie wykonywania. W tym przykładzie kodu jest używana kompilacja dynamiczna. Aby zapoznać się z przewodnikiem, który pokazuje, jak skompilować, zobacz Przewodnik: opracowywanie i używanie niestandardowej kontrolki serwera sieci Web.
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
Trzecią częścią przykładu kodu jest strona sieci Web. W górnej części znajdują się Register
dyrektywy kontrolki użytkownika i kontrolek niestandardowych WebPart . Ponieważ w przykładzie przyjęto założenie dynamicznej kompilacji kontrolek, kod źródłowy kontrolek powinien znajdować się w podfolderze App_Code; Register
tag na stronie odwołuje się tylko do dowolnego prefiksu tagu i przestrzeni nazw kontrolek. Kontrolki niestandardowe WebPart (dostawca i odbiorca) są deklarowane w elemecie strony <asp:webpartzone>
internetowej wewnątrz <zonetemplate>
elementu.
Strona zawiera trzy sposoby tworzenia połączenia między kontrolkami niestandardowymi. Pierwsza metoda jest deklaratywna. W znacznikach dla strony <StaticConnections>
jest zadeklarowany element, a w ramach tego jest <asp:WebPartConnections>
elementem z różnymi szczegółami konsumenta i dostawcy połączenia określonego jako atrybuty. Jest to jeden ze sposobów utworzenia połączenia, deklarując je bezpośrednio na stronie sieci Web, w szczególności w ramach <asp:WebPartManager>
elementu. Ze względu na to połączenie statyczne połączenie między dwoma kontrolkami niestandardowymi jest tworzone natychmiast po raz pierwszy podczas ładowania strony.
Druga metoda tworzenia połączenia między kontrolkami jest dostarczana przez <asp:connectionszone>
element na stronie. Jeśli użytkownik przełączy stronę w tryb wyświetlania połączenia w czasie wykonywania, a następnie kliknie czasownik połączenia na jednym z kontrolek niestandardowych, <asp:connectionszone>
element automatycznie renderuje interfejs użytkownika do tworzenia połączenia.
Strona demonstruje również trzeci sposób tworzenia połączenia, co polega na programowym tworzeniu połączenia. W metodzie Button1_Click
kod tworzy ProviderConnectionPoint obiekt dla kontrolki dostawcy i pobiera szczegóły punktu połączenia przez wywołanie GetProviderConnectionPoints metody . Wykonuje podobne zadanie dla kontrolki konsumenta, wywołując metodę GetConsumerConnectionPoints . Na koniec tworzy nowy WebPartConnection obiekt, wywołując metodę ConnectWebParts w kontrolce WebPartManager .
<%@ 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>
Po załadowaniu strony sieci Web w przeglądarce pierwsze połączenie już istnieje, ponieważ jest zadeklarowane w elemecie <StaticConnections>
. Wprowadź tekst w kontrolce Dostawca kodu POCZTOWEgo i będzie on wyświetlany w kontrolce konsumenta. Następnie odłącz dwa kontrolki. Za pomocą kontrolki listy rozwijanej Tryb wyświetlania zmień stronę, aby połączyć tryb wyświetlania. Kliknij menu czasowników (reprezentowane przez strzałkę w dół na pasku tytułu) dla każdej kontrolki i zwróć uwagę, że każda z WebPart nich ma opcję Połącz . Jest to czasownik połączenia, który jest wyświetlany w menu czasowników tylko wtedy, gdy strona jest w trybie łączenia. Kliknij czasownik połączenia w jednym z kontrolek, a interfejs użytkownika połączenia dostarczony przez kontrolkę ConnectionsZone zostanie wyświetlony. Kliknij przycisk Rozłącz , aby zakończyć statyczne połączenie między kontrolkami. Użyj kontrolki Tryb wyświetlania , aby zwrócić stronę do trybu przeglądania. Spróbuj ponownie wprowadzić nowy tekst u dostawcy i zwróć uwagę, że ponieważ kontrolki są rozłączone, tekst nie zostanie zaktualizowany w kontrolce konsumenta.
Następnie użyj tej samej metody, co powyżej, aby ponownie przełączyć stronę do trybu wyświetlania połączenia. Kliknij czasownik połącz na jednym z kontrolek. Kliknij link Utwórz połączenie i użyj interfejsu użytkownika udostępnionego ConnectionsZone przez kontrolkę, aby utworzyć połączenie między kontrolkami. Jest to druga metoda tworzenia połączenia. Należy pamiętać, że po utworzeniu połączenia ostatnie parametry wprowadzone w kontrolce dostawcy (które nie powiodły się, ponieważ kontrolki zostały rozłączone) nagle pojawiają się w odbiorcy, ponieważ połączenie zostało ponownie utworzone. Kliknij przycisk Rozłącz , aby zakończyć właśnie utworzone połączenie. Wróć stronę do trybu przeglądania. Wprowadź nowy tekst w dostawcy, aby pokazać, że tekst nie został zaktualizowany i że kontrolki zostaną ponownie rozłączone.
Zwróć stronę, aby połączyć tryb wyświetlania. Zamiast klikać czasownik połączenia, kliknij przycisk Połącz kontrolki składników Web Part , który ilustruje trzecią metodę tworzenia połączenia. Takie podejście programowo łączy kontrolki w jednym prostym kroku bez konieczności używania kontrolki ConnectionsZone . Pamiętaj, że po utworzeniu połączenia ostatnie parametry wprowadzone w dostawcy nagle pojawiają się w kontrolce konsumenta.
Uwagi
W zestawie kontrolek składników Web Part połączenie jest połączeniem lub skojarzeniem między dwoma WebPart kontrolkami (lub innymi serwerami lub użytkownikami), które umożliwiają udostępnianie danych. Ta możliwość udostępniania danych umożliwia używanie połączonych kontrolek w sposób, który przekracza funkcjonalność oferowaną przez izolowane kontrolki. Jeśli na przykład jedna kontrolka dostarcza dane kodu pocztowego, a inna kontrolka może odczytywać te dane i dostarczać lokalne informacje pogodowe na podstawie kodu pocztowego, połączona funkcja dwóch kontrolek zapewnia użytkownikom większą wartość. Aby rozszerzyć ten przykład, można utworzyć inne kontrolki, które również wyświetlają informacje na podstawie kodu pocztowego, takiego jak kontrolka z linkami do wiadomości lokalnych, a wszystkie te kontrolki, które mogą pracować z danymi kodu pocztowego, mogą udostępniać dane pojedynczej kontrolce, która udostępnia kod pocztowy. Użytkownicy końcowi aplikacji składników Web Part mogą tworzyć połączenia między wszystkimi takimi zgodnymi kontrolkami bezpośrednio z przeglądarki sieci Web przy użyciu standardowego interfejsu użytkownika połączeń udostępnianego przez ConnectionsZone kontrolkę lub przy użyciu niestandardowego interfejsu użytkownika udostępnionego przez dewelopera.
Omówienie tej WebPartConnection klasy to ogólna instrukcja podstawowych szczegółów dotyczących tworzenia połączenia. Aby uzyskać więcej informacji na temat określonych składników i wymagań związanych z tworzeniem połączeń, zobacz Omówienie połączeń składników Web Part lub zobacz klasy referencyjne i przykłady kodu wymienione w poniższej dyskusji. Istnieje kilka podstawowych aspektów połączenia składników Web Part:
Dwie WebPart kontrolki. Każde połączenie składników Web Part składa się z dwóch kontrolek. Istnieje możliwość jednoczesnego uczestnictwa w kontrolce w więcej niż jednym połączeniu, ale każde pojedyncze połączenie składa się z dokładnie dwóch kontrolek. Kontrolki mogą pochodzić bezpośrednio z klasy bazowej WebPart lub mogą być innymi kontrolkami serwera, w tym kontrolkami ASP.NET, niestandardowymi kontrolkami serwera i kontrolkami użytkownika. Kontrolki, które nie pochodzą z WebPart klasy, jeśli zostaną umieszczone w WebPartZoneBase strefie, są automatycznie opakowane z obiektem GenericWebPart w czasie wykonywania, co umożliwia ich dziedziczenie z WebPart klasy i funkcji jako kontrolek czasu WebPart wykonywania.
Kontrolki znajdujące się w WebPartZoneBase strefach. Zarówno WebPart kontrolki, jak i dowolny inny typ kontroli serwera muszą znajdować się w WebPartZoneBase strefie, aby móc uczestniczyć w połączeniach składników Web Part (i większości innych funkcji składników Web Part).
Konsumenci i dostawcy. W każdym połączeniu składników Web Part istnieją dwie kontrolki: dostawca danych i odbiorca danych. Dostawca dostarcza dane użytkownikowi za pomocą określonej metody wywołania zwrotnego, która zwraca dane w postaci interfejsu. (Aby zapoznać się z przykładem tworzenia i określania metody wywołania zwrotnego, zobacz sekcję Przykład w tym temacie). Ta metoda wywołania zwrotnego jest nazywana punktem połączenia dostawcy. Szczegóły tego punktu połączenia (jego "przyjazna" nazwa, identyfikator i typ zwróconego interfejsu) znajdują się w obiekcie skojarzonym ProviderConnectionPoint z kontrolką dostawcy. Odbiorca odbiera dane za pośrednictwem określonej metody, która może akceptować wystąpienie interfejsu. Ta metoda jest znana jako punkt połączenia użytkownika, a szczegóły punktu połączenia (nazwa, identyfikator i typ interfejsu) znajdują się w obiekcie skojarzonym ConsumerConnectionPoint z kontrolką konsumenta.
Zgodne kontrolki lub prawidłowy transformator. Aby połączenie działało, konsument i dostawca muszą być zgodne (co oznacza, że określone metody punktu połączenia mogą współdziałać z tym samym typem interfejsu) lub musi istnieć WebPartTransformer obiekt umożliwiający tłumaczenie typu oferowanego przez dostawcę na typ zrozumiały dla konsumenta.
Obiekt WebPartConnection. Aby połączenie istniało, musi istnieć wystąpienie WebPartConnection klasy zawierające odwołania do kontrolek dostawcy i konsumentów wraz ze szczegółami punktów połączenia. Jeśli dostawca i odbiorca są niezgodne i zamiast tego użyj WebPartTransformer obiektu do nawiązania połączenia, połączenie odwołuje się do transformatora.
Sposób nawiązywania połączenia. Po prawidłowym zaprojektowaniu zgodnych kontrolek konsumenta i dostawcy z metodami punktu połączenia i umieszczeniu w strefie, a WebPartConnection obiekt jest dostępny, ostatnim podstawowym krokiem jest zainicjowanie połączenia. Jednym ze sposobów może się to zdarzyć, aby użytkownicy mogli utworzyć połączenie za pośrednictwem interfejsu użytkownika. Jeśli umieścisz
<asp:connectionszone>
element na stronie, a inne wymagane składniki połączenia są w miejscu, w czasie wykonywania użytkownik może przełączyć stronę w tryb wyświetlania połączenia, kliknąć czasownik połączenia w menu czasowników dostawcy lub konsumenta, a interfejs użytkownika połączenia (na ConnectionsZone podstawie kontrolki) pojawi się. Za pomocą tego interfejsu użytkownika użytkownik może zainicjować połączenie. Innym sposobem zainicjowania połączenia jest wykonywanie go programowo. W obu przypadkach, niezależnie od tego, czy za pośrednictwem interfejsu użytkownika, czy programowo, podstawowa metoda, która inicjuje połączenie, jest taka sama. Aplikacja wywołuje metodę ConnectWebParts (lub ConnectWebParts metodę, jeśli używa transformatora) w kontrolce WebPartManager , przekazując do niej dostawcę, konsumenta i odpowiednie obiekty punktu połączenia, a metoda zwraca WebPartConnection obiekt.
Klasa WebPartConnection definiuje obiekt, który hermetyzuje podstawowe szczegóły połączenia między dwoma WebPart kontrolkami. Klasa składa się prawie całkowicie z właściwości związanych ze szczegółami określonego połączenia. Kilka właściwości dotyczy kontrolki konsumenta w połączeniu. Właściwość Consumer odwołuje się do samej kontrolki konsumenta, a ConsumerID właściwość odwołuje się do identyfikatora odbiorcy. Obiekt ConsumerConnectionPoint , który zawiera szczegóły punktu połączenia konsumenta, jest przywołyyny przez właściwość konsumenta ConsumerConnectionPoint . Właściwość ConsumerConnectionPointID odwołuje się do identyfikatora ConsumerConnectionPoint obiektu. Wszystkie te właściwości połączenia związane z konsumentami muszą mieć przypisaną do nich wartość, aby utworzyć połączenie.
Klasa WebPartConnection ma również kilka właściwości, które odnoszą się do kontrolki dostawcy w połączeniu, a te odpowiadają właściwościom odbiorcy. Właściwość Provider odwołuje się do samej kontrolki dostawcy, a ProviderID właściwość odwołuje się do jej identyfikatora. Właściwość ProviderConnectionPoint odwołuje się do ProviderConnectionPoint obiektu, a ProviderConnectionPointID właściwość odwołuje się do identyfikatora punktu połączenia dostawcy.
Kilka właściwości dotyczy stanu połączenia. Właściwość IsActive wskazuje, czy połączenie jest aktywne (obecnie wymieniane dane) czy nieaktywne (nadal połączone, ale nie jest aktywnie udostępniane dane). Właściwość IsShared wskazuje, czy połączenie jest współużytkowane (dostępne dla wszystkich użytkowników strony), czy połączenie specyficzne dla użytkownika, a IsStatic właściwość wskazuje, czy kontrolka jest statyczna (zadeklarowana w znacznikach strony, a tym samym stała) czy dynamiczna (utworzona programowo, co oznacza, że można ją usunąć).
Konstruktory
WebPartConnection() |
Inicjuje nowe wystąpienie klasy WebPartConnection. |
Właściwości
Consumer |
WebPart Pobiera obiekt, który działa jako kontrolka konsumenta w połączeniu. |
ConsumerConnectionPoint |
Pobiera obiekt, który służy jako punkt połączenia dla kontrolki działającej jako odbiorca w połączeniu. |
ConsumerConnectionPointID |
Pobiera lub ustawia wartość właściwości w połączeniu, które odwołuje się do identyfikatora obiektu obsługującego jako punkt połączenia użytkownika dla tego połączenia. |
ConsumerID |
Pobiera lub ustawia wartość właściwości w połączeniu, które odwołuje się do identyfikatora WebPart kontrolki działającej jako odbiorca dla tego połączenia. |
ID |
Pobiera lub ustawia identyfikator WebPartConnection obiektu. |
IsActive |
Pobiera wartość wskazującą, czy WebPartConnection obiekt jest obecnie ustanowiony i może wymieniać dane między jego dostawcą a kontrolkami konsumentów. |
IsShared |
Pobiera wartość wskazującą, czy WebPartConnection obiekt jest widoczny dla wszystkich użytkowników, czy tylko dla bieżącego użytkownika. |
IsStatic |
Pobiera wartość wskazującą, czy WebPartConnection obiekt jest zadeklarowany w znaczniku strony sieci Web, czy też został utworzony programowo. |
Provider |
Pobiera kontrolkę działającą WebPart jako dostawca w połączeniu składników Web Part. |
ProviderConnectionPoint |
Pobiera obiekt, który służy jako punkt połączenia dla WebPart kontrolki działającej jako dostawca połączenia. |
ProviderConnectionPointID |
Pobiera lub ustawia wartość właściwości w połączeniu, które odwołuje się do identyfikatora obiektu obsługującego jako punkt połączenia dostawcy dla tego połączenia. |
ProviderID |
Pobiera lub ustawia wartość właściwości w połączeniu, które odwołuje się do identyfikatora WebPart kontrolki działającej jako dostawca dla tego połączenia. |
Transformer |
WebPartTransformer Pobiera obiekt używany do przekształcania danych między dwoma inaczej niezgodnymi punktami połączenia w połączeniu składników Web Part. |
Transformers |
Pobiera kolekcję obiektów używanych WebPartTransformer wewnętrznie przez zestaw kontrolek składników Web Part. |
Metody
Equals(Object) |
Określa, czy dany obiekt jest taki sam, jak bieżący obiekt. (Odziedziczone po Object) |
GetHashCode() |
Służy jako domyślna funkcja skrótu. (Odziedziczone po Object) |
GetType() |
Type Pobiera bieżące wystąpienie. (Odziedziczone po Object) |
MemberwiseClone() |
Tworzy płytkią kopię bieżącego Objectelementu . (Odziedziczone po Object) |
ToString() |
Zastępuje dziedziczona ToString() metoda i zwraca krótką nazwę typu dla obiektu połączenia. |