WebPartConnection Klasse

Definition

Stellt ein Objekt bereit, das zwei WebPart-Steuerelementen das Herstellen einer Verbindung ermöglicht. Diese Klasse kann nicht vererbt werden.

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
Vererbung
WebPartConnection
Attribute

Beispiele

Im folgenden Codebeispiel wird veranschaulicht, wie eine einfache Verbindung zwischen zwei WebPart Steuerelementen erstellt wird. Das Beispiel veranschaulicht drei Möglichkeiten zum Erstellen einer Verbindung: deklarativ, indem Tags für die Verbindung im Markup der Webseite platziert werden; programmgesteuert, indem Sie die Verbindung im Code erstellen; und über die Benutzeroberfläche, indem Sie ein Steuerelement auf der Seite platzieren, mit dem Benutzer eine ConnectionsZone Verbindung herstellen können.

Im Codebeispiel sind vier Teile enthalten:

  • Ein Benutzersteuerelement, mit dem Sie den Webparts Anzeigemodus auf einer Seite ändern können.

  • Quellcode für eine Schnittstelle und zwei WebPart Steuerelemente, die als Anbieter und Verbraucher für eine Verbindung fungieren.

  • Eine Webseite zum Hosten aller Steuerelemente und Ausführen des Codebeispiels.

  • Eine Erläuterung zum Ausführen der Beispielseite.

Der erste Teil dieses Codebeispiels ist das Benutzersteuerelement, mit dem Benutzer Anzeigemodi auf einer Webseite ändern können. Speichern Sie den folgenden Quellcode in einer ASCX-Datei, indem Sie ihm den Dateinamen geben, der dem Src Attribut der Register Richtlinie für dieses Benutzersteuerelement zugewiesen ist, das sich am oberen Rand der Hostwebseite befindet. Ausführliche Informationen zu Anzeigemodi und einer Beschreibung des Quellcodes in diesem Steuerelement finden Sie unter Exemplarische Vorgehensweise: Ändern von Anzeigemodi auf einer Webparts Seite.

<%@ 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>

Der zweite Teil des Codebeispiels ist der Quellcode für die Schnittstelle und Steuerelemente. Die Quelldatei enthält eine einfache Schnittstelle namens IZipCode. Es gibt auch eine WebPart Klasse namens, ZipCodeWebPart die die Schnittstelle implementiert und als Anbietersteuerelement fungiert. Die ProvideIZipCode Methode ist die Rückrufmethode, die das einzige Element der Schnittstelle implementiert. Die Methode gibt einfach eine Instanz der Schnittstelle zurück. Beachten Sie, dass die Methode mit einem ConnectionProvider Attribut in seinen Metadaten markiert wird. Dies ist der Mechanismus zum Identifizieren der Methode als Rückrufmethode für den Verbindungspunkt des Anbieters. Die andere WebPart Klasse wird benannt WeatherWebPart, und sie fungiert als Verbraucher für die Verbindung. Diese Klasse hat eine Methode namens , GetZipCode die eine Instanz der IZipCode Schnittstelle aus dem Anbietersteuerelement abruft. Beachten Sie, dass diese Methode als Verbindungspunktmethode des Verbrauchers mit einem ConnectionConsumer Attribut in seinen Metadaten gekennzeichnet ist.

Zum Ausführen des Codebeispiels müssen Sie diesen Quellcode kompilieren. Sie können es explizit kompilieren und die resultierende Assembly in den Bin-Ordner Ihrer Website oder den globalen Assemblycache einfügen. Alternativ können Sie den Quellcode in den App_Code Ordner Ihrer Website einfügen, wo sie zur Laufzeit dynamisch kompiliert wird. In diesem Codebeispiel wird die dynamische Kompilierung verwendet. Eine exemplarische Vorgehensweise zum Kompilieren finden Sie unter Exemplarische Vorgehensweise: Entwickeln und Verwenden eines benutzerdefinierten Webserversteuerelements.

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

Der dritte Teil des Codebeispiels ist die Webseite. Am oberen Rand befinden sich die Register Richtlinien für das Benutzersteuerelement und die benutzerdefinierten WebPart Steuerelemente. Da das Beispiel die dynamische Kompilierung der Steuerelemente vorausnimmt, sollte sich der Quellcode für die Steuerelemente in einem App_Code Unterordner befinden; das Register Tag auf der Seite verweist nur auf ein beliebiges Tagpräfix und den Namespace der Steuerelemente. Die benutzerdefinierten WebPart Steuerelemente (Anbieter und Verbraucher) werden innerhalb des Elements der Webseite <asp:webpartzone> innerhalb eines <zonetemplate> Elements deklariert.

Die Seite bietet drei Möglichkeiten, eine Verbindung zwischen den benutzerdefinierten Steuerelementen zu bilden. Die erste Methode ist deklarativ. Im Markup für die Seite wird ein <StaticConnections> Element deklariert und innerhalb dieses <asp:WebPartConnections> Elements mit den verschiedenen Verbraucher- und Anbieterdetails der Verbindung, die als Attribute angegeben ist. Dies ist eine Möglichkeit, eine Verbindung zu erstellen, indem Sie sie direkt auf der Webseite deklarieren, insbesondere innerhalb des <asp:WebPartManager> Elements. Aufgrund dieser statischen Verbindung wird sofort eine Verbindung zwischen den beiden benutzerdefinierten Steuerelementen erstellt, wenn die Seite zum ersten Mal geladen wird.

Eine zweite Methode zum Erstellen einer Verbindung zwischen den <asp:connectionszone> Steuerelementen wird vom Element auf der Seite bereitgestellt. Wenn ein Benutzer eine Seite zur Laufzeit in den Anzeigemodus wechselt, und klickt auf ein Verbindungsver verben auf einem der benutzerdefinierten Steuerelemente, wird das <asp:connectionszone> Element automatisch für das Erstellen einer Verbindung gerendert.

Die Seite zeigt auch eine dritte Möglichkeit zum Erstellen einer Verbindung, die programmgesteuert erfolgen soll. In der Button1_Click Methode erstellt der Code ein ProviderConnectionPoint Objekt für das Anbietersteuerelement und ruft seine Verbindungspunktdetails durch Aufrufen der GetProviderConnectionPoints Methode ab. Es führt eine ähnliche Aufgabe für die Verbrauchersteuerung aus, die die GetConsumerConnectionPoints Methode aufruft. Schließlich wird das neue WebPartConnection Objekt erstellt, indem die ConnectWebParts Methode auf dem WebPartManager Steuerelement aufgerufen wird.

<%@ 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>

Nachdem Sie die Webseite in einem Browser geladen haben, ist die erste Verbindung bereits vorhanden, da sie innerhalb des <StaticConnections> Elements deklariert wird. Geben Sie einen Text im Steuerelement des Postleitzahlenanbieters ein, und sie wird im Verbrauchersteuerelement angezeigt. Trennen Sie als Nächstes die beiden Steuerelemente. Ändern Sie mithilfe des Dropdownlistensteuerelements für den Anzeigemodus die Seite, um den Anzeigemodus herzustellen. Klicken Sie auf das Menü "Verben" (dargestellt durch einen Abwärtspfeil in der Titelleiste) für jedes WebPart Steuerelement, und beachten Sie, dass jede option Verbinden hat. Dies ist ein Verbinden-Verb, das im Menü "Verben" nur angezeigt wird, wenn sich die Seite im Verbindungsmodus befindet. Klicken Sie auf das Verbinderverb auf einem der ConnectionsZone Steuerelemente, und die vom Steuerelement bereitgestellte Verbindungsoberfläche wird angezeigt. Klicken Sie auf die Schaltfläche " Trennen ", um die statische Verbindung zwischen den Steuerelementen zu beenden. Verwenden Sie das Anzeigemodus-Steuerelement , um die Seite zum Durchsuchenmodus zurückzugeben. Versuchen Sie erneut, einen neuen Text in den Anbieter einzugeben, und beachten Sie, dass die Steuerelemente getrennt werden, der Text kann nicht im Verbrauchersteuerelement aktualisiert werden.

Verwenden Sie als Nächstes dieselbe Methode wie oben, um die Seite erneut in den Anzeigemodus zu wechseln. Klicken Sie auf ein Verbindungsverb auf einem der Steuerelemente. Klicken Sie auf den Link " Verbindung erstellen ", und verwenden Sie die vom ConnectionsZone Steuerelement bereitgestellte Benutzeroberfläche, um eine Verbindung zwischen den Steuerelementen zu erstellen. Dies ist die zweite Methode zum Erstellen einer Verbindung. Beachten Sie, dass die letzte Zeichenfolge, die Sie im Anbietersteuerelement eingegeben haben (die nicht angezeigt werden konnte, weil die Steuerelemente getrennt wurden) plötzlich im Verbraucher angezeigt wird, da die Verbindung neu erstellt wurde. Klicken Sie auf die Schaltfläche "Trennen ", um die aktuelle Verbindung zu beenden, die Sie gerade erstellt haben. Geben Sie die Seite zurück, um den Browsermodus zu durchsuchen. Geben Sie einen neuen Text in den Anbieter ein, um zu veranschaulichen, dass der Text nicht aktualisiert wird, und dass die Steuerelemente erneut getrennt werden.

Gibt die Seite zurück, um den Anzeigemodus zu verbinden. Anstatt auf ein Verbindungsverb zu klicken, klicken Sie auf die Schaltfläche Verbinden WebPart-Steuerelemente, die die dritte Methode zum Bilden einer Verbindung veranschaulicht. Dieser Ansatz verbindet die Steuerelemente programmgesteuert in einem einfachen Schritt, ohne das ConnectionsZone Steuerelement verwenden zu müssen. Beachten Sie, dass beim Erstellen der Verbindung die letzte Zeichenfolge, die Sie im Anbieter eingegeben haben, plötzlich im Verbrauchersteuerelement angezeigt wird.

Hinweise

Im Webparts-Steuerelementsatz ist eine Verbindung oder Zuordnung zwischen zwei WebPart (oder anderen Server- oder Benutzer-) Steuerelementen, mit denen sie Daten freigeben können. Diese Möglichkeit, Daten freizugeben, ermöglicht es verbundenen Steuerelementen, auf Arten zu verwenden, die die Funktionalität übersteigen, die von den isolierten Steuerelementen angeboten werden. Wenn beispielsweise ein Steuerelement Postleitzahldaten bereitstellt, und ein anderes Steuerelement kann diese Daten lesen und lokale Wetterinformationen basierend auf der Postleitzahl bereitstellen, dann bietet die verbundene Funktion der beiden Steuerelemente mehr Wert für Benutzer. Um dieses Beispiel zu erweitern, könnten andere Steuerelemente erstellt werden, die auch Informationen basierend auf einem Postleitzahlen anzeigen, z. B. ein Steuerelement mit Links zu lokalen Nachrichten, und alle diese Steuerelemente, die mit Postleitzahldaten arbeiten können, könnten Daten mit dem einzelnen Steuerelement teilen, das eine Postleitzahl bereitstellt. Endbenutzer von Webparts Anwendungen können Verbindungen zwischen allen kompatiblen Steuerelementen direkt aus einem Webbrowser erstellen und verwalten, indem sie die standardverbindungen benutzeroberfläche (UI) verwenden, die vom Steuerelement bereitgestellt wird, oder eine benutzerdefinierte Benutzeroberfläche verwenden, die von ConnectionsZone einem Entwickler bereitgestellt wird.

Diese WebPartConnection Klassenübersicht ist eine allgemeine Anweisung der grundlegenden Details zum Erstellen einer Verbindung. Weitere Informationen zu bestimmten Komponenten und Anforderungen, die bei der Erstellung von Verbindungen beteiligt sind, finden Sie unter Webparts Connections Übersicht oder sehen Sie die referenzierten Klassen und Codebeispiele in der folgenden Diskussion. Es gibt mehrere grundlegende Aspekte einer Webparts Verbindung:

  • Zwei WebPart Steuerelemente. Jede Webparts Verbindung besteht aus zwei Steuerelementen. Es ist möglich, dass ein Steuerelement gleichzeitig an mehr als einer Verbindung teilnimmt, aber jede einzelne Verbindung besteht aus genau zwei Steuerelementen. Die Steuerelemente können direkt aus der WebPart Basisklasse abgeleitet werden, oder sie können andere Serversteuerelemente sein, darunter ASP.NET Steuerelemente, benutzerdefinierte Serversteuerelemente und Benutzersteuerelemente. Steuerelemente, die nicht von der Klasse abgeleitet werden, wenn sie in einer Zone platziert werden, werden automatisch mit einem GenericWebPart WebPartZoneBase Objekt zur Laufzeit umgebrochen, wodurch sie von der WebPart WebPart Klasse und Funktion als Laufzeitsteuerelemente WebPart erben können.

  • Steuerelemente, die sich in WebPartZoneBase Zonen befinden. Sowohl WebPart Steuerelemente als auch alle anderen Serversteuerelemente müssen sich in einer WebPartZoneBase Zone befinden, um an Webparts Verbindungen teilnehmen zu können (und die meisten anderen Webparts Features).

  • Verbraucher und Anbieter. In jeder Webparts Verbindung gibt es zwei Steuerelemente: ein Anbieter von Daten und einen Verbraucher von Daten. Der Anbieter stellt Daten für den Verbraucher über eine angegebene Rückrufmethode bereit, die Daten in Form einer Schnittstelle zurückgibt. (Ein Beispiel zum Erstellen und Angeben der Rückrufmethode finden Sie im Beispielabschnitt dieses Themas.) Diese Rückrufmethode wird als Anbieterverbindungspunkt bezeichnet. Die Details dieses Verbindungspunkts (dessen Name "anzeige", eine ID und der Typ der zurückgegebenen Schnittstelle) sind in einem ProviderConnectionPoint Objekt enthalten, das dem Anbietersteuerelement zugeordnet ist. Der Verbraucher empfängt die Daten über eine angegebene Methode, die eine Instanz der Schnittstelle akzeptieren kann. Diese Methode wird als Verbraucherverbindungspunkt bezeichnet, und die Details des Verbindungspunkts (Name, ID und Art der Schnittstelle) sind in einem ConsumerConnectionPoint Objekt enthalten, das dem Verbrauchersteuerelement zugeordnet ist.

  • Kompatible Steuerelemente oder ein gültiger Transformator. Für eine Verbindung zur Arbeit muss der Verbraucher und der Anbieter entweder kompatibel sein (d. h., dass ihre angegebenen Verbindungspunktmethoden mit derselben Art von Schnittstelle funktionieren können), oder es muss ein Objekt vorhanden sein, das den vom Anbieter angebotenen Typ in einen WebPartTransformer vom Verbraucher verstandenen Typ übersetzen kann.

  • Ein WebPartConnection-Objekt. Für eine Verbindung, die vorhanden ist, muss eine Instanz der WebPartConnection Klasse vorhanden sein, die Verweise auf den Anbieter und die Verbrauchersteuerelemente enthält, zusammen mit den Details ihrer Verbindungspunkte. Wenn der Anbieter und der Verbraucher nicht kompatibel sind und stattdessen ein WebPartTransformer Objekt zum Verbinden verwenden, verweist die Verbindung auf den Transformator.

  • Ein Mittel zum Einrichten der Verbindung. Nachdem kompatible Verbraucher- und Anbietersteuerelemente mit Verbindungspunktmethoden ordnungsgemäß entwickelt und in einer Zone platziert wurden und ein WebPartConnection Objekt verfügbar ist, ist der letzte grundlegende Schritt erforderlich, um die Verbindung zu initiieren. Eine Möglichkeit, dies zu geschehen, ist es benutzern, die Verbindung über die Benutzeroberfläche zu erstellen. Wenn Sie ein Element auf der Seite platzieren und die anderen erforderlichen Komponenten für eine <asp:connectionszone> Verbindung vorhanden sind, wird zur Laufzeit ein Benutzer die Seite in den Anzeigemodus wechseln können, klicken Sie im Menü "Verben" des Anbieters oder des Verbrauchers auf ein Connect-Verb, und eine Verbindungs-UI (basierend auf dem ConnectionsZone Steuerelement) wird angezeigt. Durch diese Benutzeroberfläche kann der Benutzer die Verbindung initiieren. Eine weitere Möglichkeit zum Initiieren der Verbindung besteht darin, die Verbindung programmgesteuert zu erledigen. In beiden Fällen, ob über die Benutzeroberfläche oder programmgesteuert, ist die zugrunde liegende Methode, die die Verbindung initiiert, identisch. Die Anwendung ruft die ConnectWebParts Methode (oder ConnectWebParts die Methode bei Verwendung eines Transformators) auf dem Steuerelement auf, übergeben sie an den Anbieter, den WebPartManager Verbraucher und ihre jeweiligen Verbindungspunktobjekte, und die Methode gibt ein WebPartConnection Objekt zurück.

Die WebPartConnection Klasse definiert ein Objekt, das die wesentlichen Details einer Verbindung zwischen zwei WebPart Steuerelementen kapselt. Die Klasse besteht fast vollständig aus Eigenschaften im Zusammenhang mit den Details einer bestimmten Verbindung. Mehrere Eigenschaften betreffen die Verbrauchersteuerung in einer Verbindung. Die Consumer Eigenschaft verweist auf das Verbrauchersteuerelement selbst, und die ConsumerID Eigenschaft verweist auf die ID des Verbrauchers. Das ConsumerConnectionPoint Objekt, das die Details des Verbindungspunkts des Verbrauchers enthält, wird von der Eigenschaft des Verbrauchers ConsumerConnectionPoint verwiesen. Die ConsumerConnectionPointID Eigenschaft verweist auf die ID des ConsumerConnectionPoint Objekts. Alle diese verbraucherbezogenen Verbindungseigenschaften müssen ihnen einen Wert zugewiesen haben, um eine Verbindung zu erstellen.

Die WebPartConnection Klasse verfügt auch über mehrere Eigenschaften, die sich auf das Anbietersteuerelement in einer Verbindung beziehen, und diese entsprechen den Eigenschaften für einen Verbraucher. Die Provider Eigenschaft verweist auf das Anbietersteuerelement selbst, während die ProviderID Eigenschaft auf seine ID verweist. Die ProviderConnectionPoint Eigenschaft verweist auf das ProviderConnectionPoint Objekt, und die ProviderConnectionPointID Eigenschaft verweist auf die ID des Verbindungspunkts des Anbieters.

Mehrere Eigenschaften betreffen den Zustand der Verbindung. Die IsActive Eigenschaft gibt an, ob die Verbindung aktiv ist (derzeit austauschende Daten) oder inaktiv (weiterhin verbunden, aber nicht aktiv freigegebene Daten). Die IsShared Eigenschaft gibt an, ob die Verbindung eine freigegebene (für alle Benutzer einer Seite verfügbar) oder eine benutzerspezifische Verbindung ist, und die IsStatic Eigenschaft gibt an, ob das Steuerelement statisch (deklariert im Seitenmarkup und somit dauerhaft) oder dynamisch (programmgesteuert erstellt wurde, was bedeutet, dass es gelöscht werden kann).

Konstruktoren

WebPartConnection()

Initialisiert eine neue Instanz der WebPartConnection-Klasse.

Eigenschaften

Consumer

Ruft ein WebPart-Objekt ab, das in einer Verbindung als Consumersteuerelement fungiert.

ConsumerConnectionPoint

Ruft das Objekt ab, das als Verbindungspunkt für ein Steuerelement fungiert, das als Consumer in einer Verbindung fungiert.

ConsumerConnectionPointID

Ruft den Eigenschaftswert für eine Verbindung ab, der auf die ID des Objekts verweist, das als Consumerverbindungspunkt für diese Verbindung fungiert, oder legt diesen fest.

ConsumerID

Ruft den Eigenschaftswert für eine Verbindung ab, der auf die ID des WebPart-Steuerelements verweist, das als Consumer für diese Verbindung fungiert, oder legt diesen fest.

ID

Ruft die ID eines WebPartConnection-Objekts ab oder legt diese fest.

IsActive

Ruft einen Wert ab, der angibt, ob ein WebPartConnection-Objekt derzeit eingerichtet und in der Lage ist, Daten zwischen seinem Anbieter- und seinem Consumersteuerelement auszutauschen.

IsShared

Ruft einen Wert ab, der angibt, ob ein WebPartConnection-Objekt für alle Benutzer oder nur für den aktuellen Benutzer sichtbar ist.

IsStatic

Ruft einen Wert ab, der angibt, ob ein WebPartConnection-Objekt im Markup einer Webseite deklariert ist oder programmgesteuert erstellt wird.

Provider

Ruft ein WebPart-Steuerelement ab, das in einer Webparts-Verbindung als Anbieter fungiert.

ProviderConnectionPoint

Ruft das Objekt ab, das als Verbindungspunkt für ein WebPart-Steuerelement fungiert, das als Anbieter in einer Verbindung fungiert.

ProviderConnectionPointID

Ruft den Eigenschaftswert für eine Verbindung ab, der auf die ID des Objekts verweist, das als Anbieterverbindungspunkt für diese Verbindung fungiert, oder legt diesen fest.

ProviderID

Ruft den Eigenschaftswert für eine Verbindung ab, der auf die ID des WebPart-Steuerelements verweist, das als Anbieter für diese Verbindung fungiert, oder legt diesen fest.

Transformer

Ruft ein WebPartTransformer-Objekt ab, mit dessen Hilfe Daten zwischen zwei andernfalls nicht kompatiblen Verbindungspunkten in einer Webparts-Verbindung transformiert werden.

Transformers

Ruft eine Auflistung von WebPartTransformer-Objekten ab, die vom Webparts-Steuerelementsatz intern verwendet wird.

Methoden

Equals(Object)

Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist.

(Geerbt von Object)
GetHashCode()

Fungiert als Standardhashfunktion.

(Geerbt von Object)
GetType()

Ruft den Type der aktuellen Instanz ab.

(Geerbt von Object)
MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.

(Geerbt von Object)
ToString()

Überschreibt die geerbte ToString()-Methode und gibt einen kurzen Typnamen für das Verbindungsobjekt zurück.

Gilt für

Siehe auch