ConnectionPoint Kelas

Definisi

Berfungsi sebagai kelas dasar untuk menentukan objek titik koneksi yang memungkinkan kontrol konsumen dan kontrol penyedia dalam koneksi Bagian Web untuk berbagi data.

public ref class ConnectionPoint abstract
public abstract class ConnectionPoint
type ConnectionPoint = class
Public MustInherit Class ConnectionPoint
Warisan
ConnectionPoint
Turunan

Contoh

Contoh kode berikut menunjukkan pembuatan koneksi Bagian Web yang menyertakan objek yang diperlukan ConnectionPoint . ConnectionPoint Karena kelas adalah kelas dasar abstrak, instans kelas turunannya--ProviderConnectionPoint dan ConsumerConnectionPoint--adalah objek aktual yang digunakan untuk membentuk koneksi.

Contohnya memiliki empat bagian:

  • Kontrol pengguna yang memungkinkan Anda mengubah mode tampilan Komponen Web pada halaman.

  • Kode sumber untuk antarmuka dan dua WebPart kontrol yang bertindak sebagai penyedia dan konsumen untuk koneksi.

  • Halaman Web untuk menghosting semua kontrol dan menjalankan contoh kode.

  • Penjelasan tentang cara menjalankan halaman contoh.

Bagian pertama dari contoh kode ini adalah kontrol pengguna yang memungkinkan pengguna mengubah mode tampilan pada halaman Web. Simpan kode sumber berikut ke file .ascx, berikan nama file yang ditetapkan ke Src atribut Register direktif untuk kontrol pengguna ini, yang berada di dekat bagian atas halaman Web hosting. Untuk detail tentang mode tampilan dan deskripsi kode sumber dalam kontrol ini, lihat Panduan: Mengubah Mode Tampilan pada Halaman Bagian Web.

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

Bagian kedua dari contoh kode adalah kode sumber untuk antarmuka dan kontrol. File sumber berisi antarmuka sederhana bernama IZipCode. Ada juga WebPart kelas bernama ZipCodeWebPart yang mengimplementasikan antarmuka dan bertindak sebagai kontrol penyedia. Metodenya ProvideIZipCode adalah metode panggilan balik yang mengimplementasikan satu-satunya anggota antarmuka. Metode ini hanya mengembalikan instans antarmuka. Perhatikan bahwa metode ditandai dengan ConnectionProvider atribut dalam metadatanya. Ini adalah mekanisme untuk mengidentifikasi metode sebagai metode panggilan balik untuk titik koneksi penyedia. Kelas lain WebPart diberi nama WeatherWebPart, dan bertindak sebagai konsumen untuk koneksi. Kelas ini memiliki metode bernama GetZipCode yang mendapatkan instans IZipCode antarmuka dari kontrol penyedia. Perhatikan bahwa metode ini ditandai sebagai metode titik koneksi konsumen dengan ConnectionConsumer atribut dalam metadatanya. Ini adalah mekanisme untuk mengidentifikasi metode titik koneksi dalam kontrol konsumen.

Agar contoh kode berjalan, Anda harus mengkompilasi kode sumber ini. Anda dapat mengkompilasinya secara eksplisit dan meletakkan rakitan yang dihasilkan di folder Bin situs Web Anda atau cache perakitan global. Atau, Anda dapat meletakkan kode sumber di folder App_Code situs Anda, di mana kode tersebut akan dikompilasi secara dinamis pada durasi. Contoh kode ini menggunakan kompilasi dinamis. Untuk panduan yang menunjukkan cara mengkompilasi, lihat Panduan: Mengembangkan dan Menggunakan Kontrol Server Web Kustom.

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

Bagian ketiga dari contoh kode adalah halaman Web. Di dekat bagian atas adalah Register arahan untuk mendaftarkan kontrol kustom yang membentuk koneksi, dan kontrol pengguna yang memungkinkan pengguna mengubah mode tampilan di halaman. Koneksi itu sendiri dibuat secara deklaratif dalam <staticconnections> elemen di halaman. Anda juga dapat membuat koneksi secara terprogram; kode untuk melakukan itu terkandung dalam Button1_Click metode . Apakah koneksi dibuat secara deklaratif atau terprogram, titik koneksi harus selalu ditentukan untuk penyedia dan konsumen. Metode ini Button2_Click mengakses ConnectionPoint objek untuk penyedia dan konsumen, dan menulis beberapa nilai properti mereka ke label di halaman.

<%@ Page Language="C#" %>
<%@ register tagprefix="uc1" 
    tagname="DisplayModeMenuCS"
    src="~/displaymodemenucs.ascx" %>
<%@ Register TagPrefix="aspSample" 
    Namespace="Samples.AspNet.CS.Controls" %>
    
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

  protected void Button1_Click(object sender, EventArgs e)
  {
    ProviderConnectionPoint provPoint =
      mgr.GetProviderConnectionPoints(zip1)["ZipCodeProvider"];
    ConsumerConnectionPoint connPoint =
      mgr.GetConsumerConnectionPoints(weather1)["ZipCodeConsumer"];
      
    if(mgr.CanConnectWebParts(zip1, provPoint, weather1, connPoint))
      mgr.ConnectWebParts(zip1, provPoint, weather1, connPoint);
  
  }  
  protected void Button2_Click(object sender, EventArgs e)
  {
    WebPartConnection conn = mgr.Connections[0];
    
    lblConn.Text = "<h2>Connection Point Details</h2>" + 
       "<h3>Provider Connection Point</h3>" + 
       "  Display name: " + conn.ProviderConnectionPoint.DisplayName + 
       "<br />" + 
       "  ID: " + conn.ProviderConnectionPoint.ID + 
       "<br />" + 
       "  Interface type: " + 
        conn.ProviderConnectionPoint.InterfaceType.ToString() + 
       "<br />" + 
       "  Control type: " + conn.ProviderConnectionPoint.ControlType.ToString() + 
       "<br />" + 
       "  Allows multiple connections: " + 
          conn.ProviderConnectionPoint.AllowsMultipleConnections.ToString() + 
       "<br />" + 
       "  Enabled: " + conn.ProviderConnectionPoint.GetEnabled(zip1).ToString() + 
       "<hr />" + 
       "<h3>Consumer Connection Point</h3>" + 
       "  Display name: " + conn.ConsumerConnectionPoint.DisplayName + 
       "<br />" + 
       "  ID: " + conn.ConsumerConnectionPoint.ID + 
       "<br />" + 
       "  Interface type: " + conn.ConsumerConnectionPoint.InterfaceType.ToString() + 
       "<br />" + 
       "  Control type: " + conn.ConsumerConnectionPoint.ControlType.ToString() + 
       "<br />" + 
       "  Allows multiple connections: " + 
          conn.ConsumerConnectionPoint.AllowsMultipleConnections.ToString() + 
       "<br />" + 
       "  Enabled: " + conn.ConsumerConnectionPoint.GetEnabled(zip1).ToString();
  }

  protected void Page_Load(object sender, EventArgs e)
  {
    lblConn.Text = String.Empty;
  }
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
      <asp:WebPartManager ID="mgr" runat="server" >
        <StaticConnections>
          <asp:WebPartConnection ID="conn1"
            ConsumerConnectionPointID="ZipCodeConsumer"
            ConsumerID="weather1" 
            ProviderConnectionPointID="ZipCodeProvider" 
            ProviderID="zip1" />
        </StaticConnections>      
      </asp:WebPartManager>
      <uc1:displaymodemenucs id="menu1" runat="server" />
      <asp:WebPartZone ID="WebPartZone1" runat="server">
        <ZoneTemplate>
          <aspSample:ZipCodeWebPart ID="zip1" runat="server"
            Title="Zip Code Provider"  />
          <aspSample:WeatherWebPart ID="weather1" runat="server" 
            Title="Zip Code Consumer" />
        </ZoneTemplate>
      </asp:WebPartZone>
      <asp:ConnectionsZone ID="ConnectionsZone1" runat="server">
      </asp:ConnectionsZone>
      <asp:Button ID="Button1" runat="server" 
        Text="Dynamic Connection" 
        OnClick="Button1_Click" />      
      <br />
      <asp:Button ID="Button2" runat="server" 
        Text="Connection Point Details" 
        OnClick="Button2_Click" />
      <br />
      <asp:Label ID="lblConn" runat="server" />
    </div>
    </form>
</body>
</html>
<%@ Page Language="VB" %>
<%@ register tagprefix="uc1" 
    tagname="DisplayModeMenuVB"
    src="~/displaymodemenuvb.ascx" %>
<%@ Register TagPrefix="aspSample" 
    Namespace="Samples.AspNet.VB.Controls" %>
    
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

  Protected Sub Button1_Click(ByVal sender As Object, _
    ByVal e As System.EventArgs)

    Dim provPoint As ProviderConnectionPoint = _
      mgr.GetProviderConnectionPoints(zip1)("ZipCodeProvider")
    Dim connPoint As ConsumerConnectionPoint = _
      mgr.GetConsumerConnectionPoints(weather1)("ZipCodeConsumer")

    If mgr.CanConnectWebParts(zip1, provPoint, weather1, connPoint) Then
      mgr.ConnectWebParts(zip1, provPoint, weather1, connPoint)
    End If
    
  End Sub
  
  Protected Sub Button2_Click(ByVal sender As Object, _
    ByVal e As System.EventArgs)
    
    Dim conn As WebPartConnection = mgr.Connections(0)

    lblConn.Text = "<h2>Connection Point Details</h2>" & _
      "<h3>Provider Connection Point</h3>" & _
      "  Display name: " & conn.ProviderConnectionPoint.DisplayName & _
      "<br />" & _
      "  ID: " & conn.ProviderConnectionPoint.ID & _
      "<br />" & _
      "  Interface type: " & conn.ProviderConnectionPoint.InterfaceType.ToString() & _
      "<br />" & _
      "  Control type: " & conn.ProviderConnectionPoint.ControlType.ToString() & _
      "<br />" & _
      "  Allows multiple connections: " & _
        conn.ProviderConnectionPoint.AllowsMultipleConnections.ToString() & _
      "<br />" & _
      "  Enabled: " & conn.ProviderConnectionPoint.GetEnabled(zip1).ToString() & _
      "<hr />" & _
      "<h3>Consumer Connection Point</h3>" & _
      "  Display name: " & conn.ConsumerConnectionPoint.DisplayName & _
      "<br />" & _
      "  ID: " & conn.ConsumerConnectionPoint.ID & _
      "<br />" & _
      "  Interface type: " & conn.ConsumerConnectionPoint.InterfaceType.ToString() & _
      "<br />" & _
      "  Control type: " & conn.ConsumerConnectionPoint.ControlType.ToString() & _
      "<br />" & _
      "  Allows multiple connections: " & _
        conn.ConsumerConnectionPoint.AllowsMultipleConnections.ToString() & _
      "<br />" & _
      "  Enabled: " & conn.ConsumerConnectionPoint.GetEnabled(zip1).ToString()
          
  End Sub

  Protected Sub Page_Load(ByVal sender As Object, _
    ByVal e As System.EventArgs)
    lblConn.Text = String.Empty
  End Sub
  
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
      <asp:WebPartManager ID="mgr" runat="server" >
        <StaticConnections>
          <asp:WebPartConnection ID="conn1"
            ConsumerConnectionPointID="ZipCodeConsumer"
            ConsumerID="weather1" 
            ProviderConnectionPointID="ZipCodeProvider" 
            ProviderID="zip1" />
        </StaticConnections>      
      </asp:WebPartManager>
      <uc1:displaymodemenuvb id="menu1" runat="server" />
      <asp:WebPartZone ID="WebPartZone1" runat="server">
        <ZoneTemplate>
          <aspSample:ZipCodeWebPart ID="zip1" runat="server"
            Title="Zip Code Provider"  />
          <aspSample:WeatherWebPart ID="weather1" runat="server" 
            Title="Zip Code Consumer" />
        </ZoneTemplate>
      </asp:WebPartZone>
      <asp:ConnectionsZone ID="ConnectionsZone1" runat="server">
      </asp:ConnectionsZone>
      <asp:Button ID="Button1" runat="server" 
        Text="Dynamic Connection" 
        OnClick="Button1_Click" />      
      <br />
      <asp:Button ID="Button2" runat="server" 
        Text="Connection Point Details" 
        OnClick="Button2_Click" />
      <br />
      <asp:Label ID="lblConn" runat="server" />
    </div>
    </form>
</body>
</html>

Setelah Anda memuat halaman di browser, klik tombol Detail Titik Koneksi . Informasi tentang penyedia dan titik koneksi konsumen yang dibuat dalam koneksi deklaratif muncul. Selanjutnya, gunakan kontrol drop-down Mode Tampilan untuk mengalihkan halaman ke mode sambungkan. Pada menu kata kerja salah WebPart satu kontrol (diwakili oleh panah ke bawah di bilah judul), klik kata kerja sambungkan. UI koneksi muncul, dibuat secara otomatis oleh kontrol yang <asp:connectionszone> dideklarasikan di halaman. Klik tombol Putuskan sambungan untuk mengakhiri koneksi yang ada. Gunakan kontrol Mode Tampilan untuk mengembalikan halaman untuk menelusuri mode. Selanjutnya, klik tombol Koneksi Dinamis untuk membuat koneksi secara terprogram. Klik lagi tombol Detail Titik Koneksi , untuk menunjukkan detail tentang dua objek titik koneksi.

Keterangan

Setiap koneksi Bagian Web terdiri dari dua kontrol server berbagi data: satu kontrol adalah konsumen, yang lain adalah penyedia. Untuk diskusi tentang komponen penting dari koneksi Bagian Web, dan objek koneksi itu WebPartConnection sendiri, lihat gambaran umum kelas. Setiap koneksi Bagian Web memerlukan titik koneksi. Penyedia dan kontrol konsumen masing-masing harus memiliki setidaknya satu objek yang ditentukan ConnectionPoint (masing-masing dapat secara opsional memiliki beberapa titik koneksi) yang berisi detail tentang bagaimana kontrol dapat terhubung ke kontrol lain dan jenis data yang dapat dibagikannya. Dalam koneksi aktual, penyedia memiliki jenis objek titik koneksi sendiri (berasal dari kelas dasar ConnectionPoint ), ProviderConnectionPoint instans, dan konsumen memiliki objek sendiri, ConsumerConnectionPoint instans.

Untuk membuat titik koneksi penyedia, pengembang harus menambahkan metode panggilan balik ke penyedia yang akan mengembalikan instans antarmuka yang diimplementasikan kepada konsumen. Mereka harus menandai metode panggilan balik dalam kode sumber dengan ConnectionProvider atribut kode (lihat ConnectionProviderAttribute kelas ). Demikian pula, untuk membuat titik koneksi konsumen, pengembang harus menambahkan metode ke konsumen yang menerima instans antarmuka, dan mereka harus menandai metode tersebut dengan ConnectionConsumer atribut (lihat ConnectionConsumerAttribute kelas ).

Saat pengembang membuat koneksi di halaman Web, mereka dapat dibuat sebagai koneksi statis atau dinamis. Koneksi statis dideklarasikan dalam markup halaman Web. Ketika koneksi statis dideklarasikan, pengembang dapat menunjuk titik koneksi mana yang digunakan untuk konsumen dan penyedia dengan menetapkan nilai ke ProviderConnectionPointID atribut dan ConsumerConnectionPointID dalam <asp:webpartconnection> tag elemen. Pendekatan ini sangat berguna jika ada beberapa titik koneksi yang ditentukan dalam kontrol konsumen dan penyedia, karena memungkinkan koneksi statis untuk mengidentifikasi titik koneksi mana yang akan digunakan untuk koneksi.

Koneksi dinamis dibuat secara terprogram, baik oleh kode pengembang atau oleh pengguna melalui antarmuka pengguna (UI) yang disediakan oleh ConnectionsZone kontrol. Untuk membuat koneksi dalam kode, pengembang harus mendapatkan instans WebPartConnection objek dengan memanggil ConnectWebParts metode pada WebPartManager kontrol. Sebelum mereka dapat memanggil metode ini, pengembang harus memiliki referensi ke kontrol server konsumen dan penyedia dan objek titik koneksi masing-masing. Untuk mendapatkan referensi ke titik koneksi untuk penyedia dan kontrol konsumen, pengembang terlebih dahulu memanggil GetProviderConnectionPoints metode dan GetConsumerConnectionPoints pada WebPartManager kontrol. Metode ini mengembalikan objek titik koneksi yang sesuai, yang pada gilirannya dapat diteruskan ke metode untuk membuat koneksi.

Ketika objek titik koneksi penyedia dan konsumen bekerja dengan jenis antarmuka yang sama, keduanya kompatibel dan dapat membentuk koneksi langsung untuk berbagi data. Jika mereka tidak bekerja dengan jenis antarmuka yang sama, WebPartTransformer objek harus digunakan untuk menerjemahkan instans antarmuka dari penyedia ke dalam jenis yang dapat dikerjakan konsumen.

Kelas abstrak ConnectionPoint menyediakan detail dasar titik koneksi yang dibagikan oleh kontrol konsumen dan penyedia. Beberapa properti berisi detail ini. Properti AllowsMultipleConnections menunjukkan apakah titik koneksi dapat berpartisipasi dalam lebih dari satu koneksi pada satu waktu. Secara default, titik koneksi penyedia dapat berpartisipasi dalam beberapa koneksi, dan titik koneksi konsumen tidak dapat. Properti ControlType menunjukkan jenis kontrol server yang terkait dengan titik koneksi. Perhatikan bahwa tidak hanya WebPart kontrol yang dapat membentuk koneksi; kontrol server apa pun, baik kontrol ASP.NET, kontrol kustom, atau kontrol pengguna, dapat diaktifkan untuk berpartisipasi dalam koneksi jika ditempatkan di WebPartZoneBase zona. Properti DisplayName ini menyediakan nama yang mudah diingat untuk titik koneksi yang dapat ditampilkan di UI untuk membantu pengguna yang membuat koneksi. Properti ID berfungsi sebagai pengidentifikasi string untuk objek titik koneksi itu sendiri. Properti InterfaceType menunjukkan jenis instans antarmuka apa yang dipahami titik koneksi. Apakah titik koneksi tertentu menyediakan atau menggunakan instans antarmuka tersebut ditentukan oleh apakah itu objek ProviderConnectionPoint atau ConsumerConnectionPoint .

Kelas ConnectionPoint ini memiliki satu metode. Metode mengembalikan GetEnabled nilai Boolean yang menunjukkan apakah titik koneksi saat ini dapat berpartisipasi dalam koneksi.

Kelas ini ConnectionPoint juga memiliki satu bidang publik, DefaultID. Bidang ini berisi nilai yang digunakan untuk mengidentifikasi titik koneksi default dalam koneksi.

Catatan

Atribut untuk menentukan metode titik koneksi hanya memiliki satu parameter yang diperlukan, displayName, sehingga dimungkinkan untuk membuat atribut titik koneksi default tanpa menentukan ID. Dalam kasus seperti itu DefaultID , bidang memasok nilai dasar untuk digunakan.

Bidang

DefaultID

Mewakili string yang digunakan untuk mengidentifikasi titik koneksi default dalam kumpulan titik koneksi yang terkait dengan kontrol server.

Properti

AllowsMultipleConnections

Mendapatkan nilai yang menunjukkan apakah titik koneksi mendukung beberapa koneksi simultan.

ControlType

Type Mendapatkan kontrol server tempat titik koneksi dikaitkan.

DisplayName

Mendapatkan string yang berfungsi sebagai nama tampilan yang ramah untuk mewakili titik koneksi di antarmuka pengguna (UI).

ID

Mendapatkan string yang berisi pengidentifikasi untuk titik koneksi.

InterfaceType

Mendapatkan jenis antarmuka yang digunakan oleh titik koneksi.

Metode

Equals(Object)

Menentukan apakah objek yang ditentukan sama dengan objek saat ini.

(Diperoleh dari Object)
GetEnabled(Control)

Mengembalikan nilai yang menunjukkan apakah titik koneksi dapat berpartisipasi dalam koneksi.

GetHashCode()

Berfungsi sebagai fungsi hash default.

(Diperoleh dari Object)
GetType()

Mendapatkan instans Type saat ini.

(Diperoleh dari Object)
MemberwiseClone()

Membuat salinan dangkal dari yang saat ini Object.

(Diperoleh dari Object)
ToString()

Mengembalikan string yang mewakili objek saat ini.

(Diperoleh dari Object)

Berlaku untuk

Lihat juga