Bagikan melalui


ConsumerConnectionPoint Kelas

Definisi

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

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

Contoh

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

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. 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 ConsumerConnectionPointID atribut dalam <asp:webpartconnection> elemen . Anda juga dapat membuat koneksi secara terprogram; kode untuk melakukan itu ada dalam Button1_Click metode . Dalam hal ini, ConsumerConnectionPoint 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 Penyedia 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 Konsumen . UI sekarang menampilkan kontrol drop-down yang mencantumkan nama tampilan titik koneksi konsumen. Pilih titik koneksi di daftar drop-down, lalu klik Sambungkan untuk menyelesaikan koneksi. Selanjutnya, klik Putuskan sambungan lagi. 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 menunjukkan detail tentang objek titik koneksi konsumen sekali lagi.

Contoh telah menunjukkan pembuatan koneksi dan menggunakan titik koneksi konsumen dengan tiga cara: koneksi statis yang dideklarasikan dalam markup halaman Web; koneksi yang dibuat dalam kode yang menggunakan ConsumerConnectionPoint 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 konsumen dalam koneksi, titik koneksinya harus menjadi ConsumerConnectionPoint objek. Untuk detail tentang koneksi Bagian Web dan titik koneksi, baca topik yang tercantum di bagian Lihat Juga di bawah ini.

Untuk membuat ConsumerConnectionPoint objek, diperlukan beberapa langkah:

  1. Aktifkan kontrol konsumen untuk mereferensikan instans antarmuka. WebPart Atau kontrol server lainnya (semua jenis kontrol server yang akan ditambahkan ke WebPartZoneBase zona dapat digunakan) harus dapat menggunakan data dari instans antarmuka tertentu. Kontrol tidak perlu mengimplementasikan antarmuka; hanya penyedia yang harus menerapkannya. Konsumen dapat bekerja dengan jenis antarmuka yang tepat yang dilayani oleh penyedia atau, jika tidak, WebPartTransformer objek dapat digunakan untuk mengubah data dari jenis antarmuka penyedia menjadi jenis yang dipahami oleh konsumen. Cara umum untuk mengaktifkan konsumen adalah dengan mendeklarasikan bidang privat untuk berisi referensi ke jenis antarmuka yang diinginkan.

  2. Identifikasi metode panggilan balik. Metode dalam konsumen harus diidentifikasi sebagai metode panggilan balik untuk membuat koneksi dengan penyedia. Metode ini mengambil instans antarmuka yang diterapkan penyedia, dan menetapkannya ke (misalnya) bidang privat yang dibuat pada langkah pertama. Pendekatan Bagian Web untuk mengidentifikasi metode panggilan balik di konsumen adalah menambahkan ConnectionConsumer atribut metadata (ditentukan oleh ConnectionConsumerAttribute kelas) ke metode yang menerima instans antarmuka. Saat atribut ditambahkan, satu-satunya parameter yang diperlukan adalah nama tampilan yang akan digunakan untuk titik koneksi konsumen. Parameter opsional juga dapat ditambahkan, seperti ID.

  3. Proses dan keluarkan data dari instans antarmuka. Lakukan pemrosesan internal apa pun sesuai kebutuhan pada data, dan kemudian biasanya kontrol konsumen akan merender data ke halaman. Cara umum untuk melakukan ini adalah dengan mengambil alih metode kontrol OnPreRender .

    Catatan

    Selama permintaan sinkron, konsumen harus meminta data langsung dari penyedia selama atau segera setelah peristiwa.PreRender Selama permintaan asinkron, jika metode panggilan balik penyedia tidak dipanggil kapan pun selama penyajian, pengembang dapat mengasumsikan bahwa tidak ada data yang dikirim ke konsumen.

Setelah kontrol dilengkapi untuk bertindak sebagai konsumen, kontrol dapat berpartisipasi dalam koneksi (dengan asumsi bahwa kontrol penyedia juga dilengkapi dan tersedia). Untuk membuat koneksi statis dan deklaratif di markup halaman Web, pengembang dapat menggunakan elemen .<asp:webpartconnection> ConnectionConsumer Jika atribut dalam kode sumber konsumen yang mengidentifikasi metode panggilan balik menentukan ID untuk titik koneksi, maka nilai tersebut ConsumerConnectionPointID harus ditetapkan ke atribut dalam <asp:webpartconnection> elemen pada halaman. Alasan bahwa pengembang mungkin menentukan ID untuk titik koneksi konsumen adalah jika ada beberapa titik koneksi yang ditentukan dalam kontrol konsumen. Jika ID tidak ditentukan untuk titik koneksi konsumen dalam kontrol konsumen, nilai tidak harus ditetapkan ke ConsumerConnectionPointID 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 ConsumerConnectionPoint dengan memanggil GetConsumerConnectionPoints metode dan meneruskannya ke ID kontrol konsumen, bersama dengan ID atau indeks objek yang ditentukan ConsumerConnectionPoint dalam kontrol konsumen. Objek yang dikembalikan ConsumerConnectionPoint , bersama dengan referensi ke kontrol konsumen, referensi ke kontrol penyedia, dan objek yang sesuai ProviderConnectionPoint , semuanya diteruskan ke ConnectWebParts metode untuk membuat objek baru WebPartConnection .

Meskipun pengembang dapat menggunakan titik koneksi konsumen sebagai bagian dari membangun koneksi baik secara deklaratif atau terprogram, pengguna juga dapat berinteraksi dengan titik koneksi konsumen 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 penyedia sebagai titik awal untuk membuat koneksi dengan mengklik kata kerja sambungnya (mereka juga dapat memilih konsumen; tidak ada perbedaan dalam koneksi yang dihasilkan), di UI mereka akan melihat kontrol daftar drop-down dengan nama tampilan titik koneksi konsumen yang tersedia (atau poin jika ada beberapa yang) tempat penyedia dapat mengirim data. Pengguna harus memilih titik koneksi konsumen untuk membuat koneksi.

Objek ConsumerConnectionPoint yang terkait langsung dengan kontrol konsumen tertentu, dan menyimpan detail tentang koneksi di properti yang diwarisinya dari kelas dasar ConnectionPoint . Misalnya, di properti yang diwariskan InterfaceType , titik koneksi konsumen menyimpan jenis antarmuka yang digunakannya. Jika penyedia dan konsumen dalam koneksi sama-sama memahami jenis antarmuka, 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 properti 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 konsumen saat membuat koneksi. Nama tampilan adalah parameter yang diperlukan saat pengembang menambahkan ConnectionConsumer atribut ke metode panggilan balik dalam kontrol konsumen. Properti yang diwariskan ID juga berguna, seperti yang ditunjukkan di atas, karena menyediakan pengidentifikasi unik untuk titik koneksi konsumen jika konsumen memiliki beberapa titik koneksi. Konsumen dapat memiliki beberapa ConsumerConnectionPoint objek yang ditentukan di dalamnya, dan dalam hal ini, ketika pengembang menambahkan ConnectionConsumer 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 konsumen dapat terhubung secara bersamaan ke beberapa penyedia. Nilai properti ini false secara default untuk titik koneksi konsumen (sedangkan defaultnya untuk true titik koneksi penyedia).

Kelas ConsumerConnectionPoint menambahkan beberapa metode unik ke anggota yang diwarisinya dari ConnectionPoint kelas. Metode ini SetObject memanggil metode panggilan balik yang ditentukan konsumen sendiri untuk mengambil instans antarmuka dari penyedia. Metode ini SupportsConnection mengembalikan nilai Boolean yang menunjukkan apakah titik koneksi dapat membuat koneksi, berdasarkan status kontrol konsumen terkait saat ini.

Konstruktor

ConsumerConnectionPoint(MethodInfo, Type, Type, String, String, Boolean)

Menginisialisasi instans baru kelas ConsumerConnectionPoint.

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)
GetType()

Mendapatkan dari instans Type saat ini.

(Diperoleh dari Object)
MemberwiseClone()

Membuat salinan dangkal dari saat ini Object.

(Diperoleh dari Object)
SetObject(Control, Object)

Memanggil metode panggilan balik dalam kontrol konsumen dan mengambil instans antarmuka dari kontrol penyedia.

SupportsConnection(Control, ConnectionInterfaceCollection)

Menentukan apakah titik koneksi konsumen saat ini mampu membuat koneksi.

ToString()

Mengembalikan string yang mewakili objek saat ini.

(Diperoleh dari Object)

Berlaku untuk

Lihat juga