WebPartConnection Klasa

Definicja

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 w adiustacji strony sieci Web; programowo przez utworzenie połączenia w kodzie; i za pośrednictwem interfejsu użytkownika, umieszczając kontrolkę ConnectionsZone na stronie, co umożliwia użytkownikom nawiązanie 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 uruchamiania 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, nadają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 na temat trybów wyświetlania i opisu 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. Jego ProvideIZipCode metoda 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ę WeatherWebParti 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 można było uruchomić przykładowy kod, należy skompilować ten kod źródłowy. Można je skompilować jawnie i umieścić wynikowy zestaw w folderze Bin witryny sieci Web lub globalnej pamięci podręcznej zestawów. Alternatywnie można 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 sposób kompilowania, zobacz Przewodnik: tworzenie 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 internetowa. W górnej części znajdują się Register dyrektywy dotyczące 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 wewnątrz elementu <zonetemplate> strony <asp:webpartzone> sieci Web.

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> element, z różnymi konsumentami i szczegółami dostawcy połączenia określonego jako atrybuty. Jest to jeden ze sposobów tworzenia połączenia przez zadeklarowanie go bezpośrednio na stronie sieci Web, w szczególności w elemecie <asp:WebPartManager> . Ze względu na to połączenie statyczne połączenie między dwoma kontrolkami niestandardowymi jest tworzone natychmiast po pierwszym załadowaniu 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 w jednej z kontrolek niestandardowych, <asp:connectionszone> element automatycznie renderuje interfejs użytkownika do tworzenia połączenia.

Strona przedstawia również trzeci sposób tworzenia połączenia, czyli programowego wykonywania tego 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 Dostawcy kodu pocztowego i będzie wyświetlany w kontrolce konsumenta. Następnie odłącz te dwie 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 WebPart kontrolki i zwróć uwagę, że każda z nich ma opcję Połącz . Jest to czasownik connect, który jest wyświetlany w menu czasowników tylko wtedy, gdy strona jest w trybie łączenia. Kliknij czasownik połącz w jednej z kontrolek, a zostanie wyświetlony interfejs użytkownika połączenia dostarczony przez kontrolkę ConnectionsZone . Kliknij przycisk Rozłącz , aby zakończyć połączenie statyczne 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 connect na jednym z kontrolek. Kliknij link Utwórz połączenie i użyj interfejsu użytkownika dostarczonego 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ć nowo utworzone połączenie. Wróć stronę do trybu przeglądania. Wprowadź nowy tekst w dostawcy, aby pokazać, że tekst nie jest aktualizowany i że kontrolki zostaną ponownie rozłączone.

Zwróć stronę, aby połączyć tryb wyświetlania. Zamiast klikać czasownik połącz, 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 . Należy pamiętać, że podczas tworzenia połączenia ostatni ciąg wprowadzony w dostawcy nagle pojawia 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. 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 o pogodzie 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ą współdziałać z danymi kodu pocztowego, mogą udostępniać dane jednej 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 i zarządzać nimi bezpośrednio z poziomu przeglądarki sieci Web przy użyciu standardowego interfejsu użytkownika (UI) udostępnionego przez ConnectionsZone kontrolkę lub 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 zapoznaj się z klasami referencyjnymi i przykładami kodu wymienionymi 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 udziału kontrolki w więcej niż jednym połączeniu, ale każde jedno 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 znajdują się 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 konsumentowi za pomocą określonej metody wywołania zwrotnego, która zwraca dane w postaci interfejsu. (Przykład tworzenia i określania metody wywołania zwrotnego można znaleźć w sekcji Przykład w tym temacie). Ta metoda wywołania zwrotnego jest znana jako punkt połączenia dostawcy. Szczegóły tego punktu połączenia (jego "przyjazna" nazwa, identyfikator i typ zwróconego interfejsu) są zawarte 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) są zawarte 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 ich określone metody punktu połączenia mogą działać z tym samym typem interfejsu) lub musi istnieć WebPartTransformer obiekt zdolny do tłumaczenia typu oferowanego przez dostawcę na typ zrozumiały dla konsumenta.

  • Obiekt WebPartConnection. Aby połączenie istniało, musi istnieć wystąpienie WebPartConnection klasy zawierającej 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 ustanawiania połączenia. Po prawidłowym zaprojektowaniu zgodnych kontrolek konsumenta i dostawcy za pomocą metod punktu połączenia i umieszczeniu w strefie, a WebPartConnection obiekt jest dostępny, ostatnim podstawowym krokiem jest zainicjowanie połączenia. Jednym ze sposobów, w jaki może się to zdarzyć, jest utworzenie połączenia 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 programowe wykonywanie tego połączenia. 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ę (lub metodęConnectWebParts, jeśli używa transformatora) w kontrolceWebPartManager, przekazując do niego dostawcę, konsumenta i odpowiednie obiekty punktu połączenia, a metoda zwraca WebPartConnectionConnectWebParts 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łyny 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 użytkownikiem muszą mieć przypisaną do nich wartość w celu utworzenia połączenia.

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 kontrolki dostawcy, a ProviderID właściwość odwołuje się do jego identyfikatora. Właściwość ProviderConnectionPoint odwołuje się do obiektu, a ProviderConnectionPointID właściwość odwołuje ProviderConnectionPoint 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) lub nieaktywne (nadal połączone, ale nie aktywnie współużytkujące dane). Właściwość IsShared wskazuje, czy połączenie jest udostępnione (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) lub 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 użytkownik 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 odbiorcy 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ą WebPartConnection , czy 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 na adiustacji strony sieci Web, czy też tworzony 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, który jest 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 wartość bieżącego wystąpienia.

(Odziedziczone po Object)
MemberwiseClone()

Tworzy płytkią kopię bieżącego Objectelementu .

(Odziedziczone po Object)
ToString()

Zastępuje dziedziczonej ToString() metody i zwraca krótką nazwę typu dla obiektu połączenia.

Dotyczy

Zobacz też