Bagikan melalui


ProviderConnectionPoint Kelas

Definisi

Menentukan objek titik koneksi yang memungkinkan kontrol server yang bertindak sebagai penyedia untuk membentuk koneksi dengan konsumen.

public ref class ProviderConnectionPoint : System::Web::UI::WebControls::WebParts::ConnectionPoint
public class ProviderConnectionPoint : System.Web.UI.WebControls.WebParts.ConnectionPoint
type ProviderConnectionPoint = class
    inherit ConnectionPoint
Public Class ProviderConnectionPoint
Inherits ConnectionPoint
Warisan
ProviderConnectionPoint

Contoh

Contoh kode berikut menunjukkan cara sederhana untuk membuat koneksi secara deklaratif, terprogram, atau melalui UI, dalam setiap kasus menggunakan titik koneksi penyedia.

Contohnya memiliki empat bagian:

  • Kontrol pengguna yang memungkinkan Anda mengubah mode tampilan Bagian 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 lainnya 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 menempatkan rakitan yang dihasilkan di folder Bin situs Web Anda atau singgahan perakitan global. Atau, Anda dapat meletakkan kode sumber di folder App_Code situs Anda, tempat 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 untuk mengubah mode tampilan di halaman. Koneksi itu sendiri dibuat secara deklaratif dalam <staticconnections> elemen pada halaman. Ini menunjukkan salah satu cara membuat koneksi--perhatikan ProviderConnectionPointID atribut dalam <asp:webpartconnection> elemen . Anda juga dapat membuat koneksi secara terprogram; kode untuk melakukan itu ada dalam Button1_Click metode . Dalam hal ini, ProviderConnectionPoint objek dibuat dan kemudian diteruskan ke metode yang membuat koneksi aktual. 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 titik koneksi penyedia dan konsumen yang ditetapkan dalam koneksi deklaratif muncul. Selanjutnya, gunakan kontrol drop-down Mode Tampilan untuk mengalihkan halaman ke mode sambungkan. Pada menu kata kerja kontrol Konsumen WebPartKode Pos (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. Ini adalah cara lain untuk membuat koneksi (melalui UI), bersama dengan metode deklaratif dan terprogram yang dibahas sebelumnya. Klik tombol Putuskan sambungan untuk mengakhiri koneksi statis yang ada. Klik tautan Buat Koneksi ke Penyedia . UI sekarang menampilkan kontrol drop-down yang mencantumkan nama tampilan titik koneksi penyedia. Pilih titik koneksi di daftar drop-down, lalu klik Sambungkan untuk menyelesaikan koneksi. Selanjutnya, klik Putuskan sambungan lagi. Kemudian, klik tombol Koneksi Dinamis untuk membuat koneksi secara terprogram. Gunakan kontrol Mode Tampilan untuk mengembalikan halaman ke mode telusuri. Klik lagi tombol Detail Titik Koneksi , untuk sekali lagi menunjukkan detail tentang objek titik koneksi penyedia.

Contoh telah menunjukkan pembuatan koneksi dan menggunakan titik koneksi penyedia dengan tiga cara: koneksi statis yang dideklarasikan dalam markup halaman Web; koneksi yang dibuat dalam kode yang menggunakan ProviderConnectionPoint objek; dan koneksi yang dibuat oleh pengguna melalui antarmuka pengguna koneksi.

Keterangan

Di setiap koneksi Bagian Web antara dua kontrol server, setiap kontrol harus memiliki (di antara persyaratan lain) objek titik koneksi terkait yang memungkinkannya untuk terhubung ke kontrol lain dan untuk menyediakan atau menggunakan data, tergantung pada apakah kontrol ditetapkan sebagai penyedia atau konsumen untuk koneksi. Objek ConnectionPoint secara umum berisi detail tentang bagaimana kontrol dapat tersambung ke kontrol lain dan jenis data yang dapat dibagikannya. Untuk kontrol yang bertindak sebagai penyedia dalam koneksi, titik koneksinya harus menjadi ProviderConnectionPoint objek. Untuk detail tentang koneksi Bagian Web dan titik koneksi, lihat topik yang tercantum di bagian Lihat Juga di bawah ini.

Untuk membuat ProviderConnectionPoint objek, diperlukan beberapa langkah:

  1. Membuat antarmuka. Ketika penyedia berbagi data dengan konsumen, penyedia melakukannya dengan mendapatkan instans antarmuka, dan mengembalikan instans tersebut kepada konsumen.

  2. Terapkan antarmuka di penyedia. WebPart Kontrol server atau lainnya (semua jenis kontrol server di WebPartZoneBase zona dapat digunakan) yang akan menjadi penyedia harus mengimplementasikan antarmuka yang dibuat pada langkah pertama.

  3. Identifikasi metode panggilan balik. Metode dalam penyedia harus diidentifikasi sebagai metode panggilan balik untuk membuat koneksi. Metode ini mengembalikan instans antarmuka yang diimplementasikan kepada konsumen. Pendekatan Bagian Web untuk mengidentifikasi metode panggilan balik di penyedia adalah menambahkan ConnectionProvider atribut metadata (ditentukan oleh ConnectionProviderAttribute kelas) ke metode yang mengembalikan instans antarmuka. Saat atribut ditambahkan, satu-satunya parameter yang diperlukan adalah nama tampilan yang akan digunakan untuk titik koneksi penyedia. Parameter opsional juga dapat ditambahkan, seperti ID untuk titik koneksi.

Setelah kontrol dilengkapi untuk bertindak sebagai penyedia, kontrol dapat berpartisipasi dalam koneksi (dengan asumsi bahwa kontrol konsumen juga dilengkapi dan tersedia). Untuk membuat koneksi statis dan deklaratif di markup halaman Web, pengembang dapat menggunakan elemen .<asp:webpartconnection> ConnectionProvider Jika atribut dalam kode sumber penyedia yang mengidentifikasi metode panggilan balik menentukan ID untuk titik koneksi, maka nilai tersebut ProviderConnectionPointID harus ditetapkan ke atribut dalam <asp:webpartconnection> elemen pada halaman. Salah satu alasan pengembang mungkin menentukan ID untuk titik koneksi penyedia adalah jika ada beberapa titik koneksi dalam kontrol penyedia. Jika ID tidak ditentukan untuk titik koneksi penyedia dalam kontrol penyedia, nilai tidak harus ditetapkan ke ProviderConnectionPointID atribut di halaman, karena koneksi akan dibuat menggunakan nilai default yang diperoleh dari DefaultID bidang .

Untuk membuat koneksi dalam kode, pengembang harus membuat objek baru ProviderConnectionPoint dengan memanggil GetProviderConnectionPoints metode dan meneruskan id kontrol penyedia, bersama dengan ID atau indeks objek yang ditentukan ProviderConnectionPoint dalam kontrol penyedia. Objek yang dikembalikan ProviderConnectionPoint , bersama dengan referensi ke kontrol penyedia, referensi ke kontrol konsumen, dan objek yang sesuai ConsumerConnectionPoint , semuanya diteruskan ke ConnectWebParts metode untuk membuat objek baru WebPartConnection .

Meskipun pengembang dapat menggunakan titik koneksi penyedia sebagai bagian dari membangun koneksi baik secara deklaratif atau terprogram, pengguna juga dapat berinteraksi dengan titik koneksi penyedia untuk membangun koneksi melalui antarmuka pengguna (UI). Jika pengembang mendeklarasikan ConnectionsZone kontrol di halaman Web, pengembang menyediakan UI run-time bagi pengguna untuk membuat koneksi. Jika pengguna memilih kontrol konsumen sebagai titik awal untuk membuat koneksi dengan mengklik kata kerja sambungnya (mereka juga dapat memilih penyedia; tidak ada perbedaan dalam koneksi yang dihasilkan), di UI mereka akan melihat kontrol daftar drop-down dengan nama tampilan titik koneksi penyedia yang tersedia (atau titik jika ada beberapa yang). Pengguna harus memilih titik koneksi penyedia untuk membuat koneksi.

Objek ProviderConnectionPoint terkait langsung dengan kontrol penyedia tertentu, dan menyimpan detail tentang koneksi di properti yang diwarisinya dari kelas dasar ConnectionPoint . Misalnya, di properti yang diwariskan InterfaceType , titik koneksi penyedia menyimpan jenis antarmuka yang dikembalikan oleh penyedia. Jika penyedia dan konsumen dalam koneksi bekerja dengan jenis antarmuka yang sama, kontrol kompatibel dan mampu membentuk koneksi langsung. Jika penyedia dan konsumen tidak dapat bekerja dengan jenis antarmuka yang sama, mereka tidak kompatibel dan harus menggunakan WebPartTransformer objek untuk menerjemahkan nilai titik InterfaceType koneksi penyedia ke dalam jenis yang dapat dikerjakan konsumen. Properti penting lainnya yang diwariskan adalah DisplayName properti , yang menyediakan nama yang mudah diingat untuk ditampilkan di UI bagi pengguna untuk memilih titik koneksi penyedia saat membuat koneksi. Nama tampilan adalah parameter yang diperlukan saat pengembang menambahkan ConnectionProvider atribut ke metode panggilan balik dalam kontrol penyedia. Properti yang diwariskan ID juga berguna, seperti yang ditunjukkan di atas, karena menyediakan pengidentifikasi unik untuk titik koneksi penyedia jika penyedia memiliki beberapa titik koneksi. Penyedia dapat memiliki beberapa ProviderConnectionPoint objek yang ditentukan di dalamnya, dan dalam hal ini, ketika pengembang menambahkan ConnectionProvider atribut ke metode, mereka harus menentukan nilai ID untuk membedakan setiap titik koneksi. Satu properti warisan penting lainnya adalah AllowsMultipleConnections properti , yang menunjukkan apakah titik koneksi penyedia dapat terhubung secara bersamaan ke beberapa konsumen. Nilai properti ini true secara default untuk titik koneksi penyedia (sedangkan defaultnya untuk false titik koneksi konsumen).

Kelas ProviderConnectionPoint menambahkan beberapa metode unik ke anggota yang diwarisinya dari ConnectionPoint kelas . Metode ini GetObject mengambil instans antarmuka yang akan dikembalikan oleh metode panggilan balik ke konsumen. Metode ini GetSecondaryInterfaces mengambil antarmuka konsumen tambahan yang merupakan bagian dari koneksi yang ada, tetapi bukan antarmuka yang digunakan untuk membuat koneksi.

Konstruktor

ProviderConnectionPoint(MethodInfo, Type, Type, String, String, Boolean)

Menginisialisasi instans baru kelas ProviderConnectionPoint.

Properti

AllowsMultipleConnections

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

(Diperoleh dari ConnectionPoint)
ControlType

Type Mendapatkan kontrol server yang dikaitkan dengan titik koneksi.

(Diperoleh dari ConnectionPoint)
DisplayName

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

(Diperoleh dari ConnectionPoint)
ID

Mendapatkan string yang berisi pengidentifikasi untuk titik koneksi.

(Diperoleh dari ConnectionPoint)
InterfaceType

Mendapatkan jenis antarmuka yang digunakan oleh titik koneksi.

(Diperoleh dari ConnectionPoint)

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.

(Diperoleh dari ConnectionPoint)
GetHashCode()

Berfungsi sebagai fungsi hash default.

(Diperoleh dari Object)
GetObject(Control)

Memanggil metode panggilan balik dalam kontrol penyedia yang mendapatkan instans antarmuka untuk kembali ke konsumen.

GetSecondaryInterfaces(Control)

Mendapatkan koleksi opsional antarmuka sekunder yang dapat didukung oleh titik koneksi penyedia.

GetType()

Mendapatkan dari instans Type saat ini.

(Diperoleh dari Object)
MemberwiseClone()

Membuat salinan dangkal dari saat ini Object.

(Diperoleh dari Object)
ToString()

Mengembalikan string yang mewakili objek saat ini.

(Diperoleh dari Object)

Berlaku untuk

Lihat juga