ProviderConnectionPoint Klass

Definition

Definierar ett anslutningspunktsobjekt som gör det möjligt för en serverkontroll som fungerar som leverantör att bilda en anslutning till en konsument.

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
Arv
ProviderConnectionPoint

Exempel

I följande kodexempel visas enkla sätt att skapa en anslutning deklarativt, programmatiskt eller via användargränssnittet, i varje fall genom att använda en provideranslutningsplats.

Exemplet har fyra delar:

  • En användarkontroll som gör att du kan ändra visningsläget för webbdelar på en sida.

  • Källkod för ett gränssnitt och två WebPart kontroller som fungerar som provider och konsument för en anslutning.

  • En webbsida som är värd för alla kontroller och kör kodexemplet.

  • En förklaring av hur du kör exempelsidan.

Den första delen av det här kodexemplet är användarkontrollen som gör det möjligt för användare att ändra visningslägen på en webbsida. Spara följande källkod i en .ascx-fil, vilket ger den det filnamn som har tilldelats till Src -attributet för direktivet för den Register här användarkontrollen, som ligger längst upp på värdwebbsidan. Mer information om visningslägen och en beskrivning av källkoden i den här kontrollen finns i Genomgång: Ändra visningslägen på en webbsida.

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

Den andra delen av kodexemplet är källkoden för gränssnittet och kontrollerna. Källfilen innehåller ett enkelt gränssnitt med namnet IZipCode. Det finns också en WebPart klass med namnet ZipCodeWebPart som implementerar gränssnittet och fungerar som providerkontroll. Dess ProvideIZipCode metod är återanropsmetoden som implementerar gränssnittets enda medlem. Metoden returnerar helt enkelt en instans av gränssnittet. Observera att metoden har markerats med ett ConnectionProvider attribut i dess metadata. Det här är mekanismen för att identifiera metoden som återanropsmetod för providerns anslutningspunkt. Den andra WebPart klassen heter WeatherWebPartoch fungerar som konsument för anslutningen. Den här klassen har en metod med namnet GetZipCode som hämtar en instans av IZipCode gränssnittet från providerkontrollen. Observera att den här metoden är markerad som konsumentens anslutningspunktsmetod med ett ConnectionConsumer attribut i dess metadata. Det här är mekanismen för att identifiera anslutningspunktsmetoden i konsumentkontrollen.

För att kodexemplet ska köras måste du kompilera den här källkoden. Du kan kompilera den explicit och placera den resulterande sammansättningen i webbplatsens bin-mapp eller den globala sammansättningscacheminnet. Du kan också placera källkoden i webbplatsens App_Code mapp, där den kompileras dynamiskt vid körning. I det här kodexemplet används dynamisk kompilering. En genomgång som visar hur du kompilerar finns i Genomgång: Utveckla och använda en anpassad webbserverkontroll.

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

Den tredje delen av kodexemplet är webbsidan. Längst upp finns Register direktiv för att registrera de anpassade kontroller som utgör anslutningen och användarkontrollen som gör det möjligt för användare att ändra visningslägen på sidan. Själva anslutningen skapas deklarativt i elementet <staticconnections> på sidan. Detta visar ett sätt att skapa en anslutning – observera ProviderConnectionPointID attributet i elementet <asp:webpartconnection> . Du kan också skapa anslutningen programmatiskt. koden för att göra det finns i Button1_Click -metoden. I det här fallet skapas ett ProviderConnectionPoint objekt och skickas sedan till en metod som skapar den faktiska anslutningen. Oavsett om anslutningen skapas deklarativt eller programmatiskt måste anslutningspunkter alltid anges för både providern och konsumenten. Metoden Button2_Click kommer åt objekten ConnectionPoint för både providern och konsumenten och skriver några av deras egenskapsvärden till en etikett på sidan.

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

När du har läst in sidan i en webbläsare klickar du på knappen Information om anslutningspunkt . Information om de provider- och konsumentanslutningspunkter som upprättats i den deklarativa anslutningen visas. Använd sedan listrutan Visningsläge för att växla sidan till anslutningsläge. Klicka på anslutningsverb på verbmenyn i postnummerkontrollenWebPart (representeras av en nedåtpil i namnlisten). Anslutningsgränssnittet visas och skapas automatiskt av kontrollen <asp:connectionszone> som deklareras på sidan. Det här är ett annat sätt att skapa en anslutning (via användargränssnittet) tillsammans med de deklarativa och programmatiska metoder som beskrevs tidigare. Klicka på knappen Koppla från för att avsluta den befintliga statiska anslutningen. Klicka på länken Skapa en anslutning till en provider . Användargränssnittet visar nu en listruta som visar visningsnamnet för provideranslutningspunkten. Välj anslutningspunkten i listrutan och klicka sedan på Anslut för att slutföra anslutningen. Klicka sedan på Koppla från igen. Klicka sedan på knappen Dynamisk anslutning för att skapa en anslutning programmatiskt. Använd kontrollen Visningsläge för att returnera sidan för att bläddra. Klicka på knappen Information om anslutningspunkt igen för att återigen ange information om providerns anslutningspunktsobjekt.

Exemplet har visat hur du upprättar en anslutning och använder en provideranslutningspunkt på tre sätt: en statisk anslutning som deklareras i webbplatsmarkeringen; en anslutning som skapats i kod som använde ett ProviderConnectionPoint objekt och en anslutning som skapats av en användare via anslutningsgränssnittet.

Kommentarer

I varje webbdelsanslutning mellan två serverkontroller måste varje kontroll ha (bland andra krav) ett associerat anslutningspunktsobjekt som gör att den kan ansluta till den andra kontrollen och antingen tillhandahålla eller använda data, beroende på om kontrollen är utsedd till provider eller konsument för anslutningen. Ett ConnectionPoint objekt i allmänhet innehåller information om hur en kontroll kan ansluta till en annan kontroll och vilken typ av data den kan dela. För en kontroll som fungerar som provider i en anslutning måste dess anslutningspunkt vara ett ProviderConnectionPoint objekt. Mer information om anslutningar och anslutningspunkter för webbdelar finns i avsnitten i avsnittet Se även nedan.

För att skapa ett ProviderConnectionPoint objekt krävs flera steg:

  1. Skapa ett gränssnitt. När en provider delar data med en konsument gör den det genom att hämta en instans av ett gränssnitt och returnera den instansen till en konsument.

  2. Implementera gränssnittet i en provider. En WebPart eller annan serverkontroll (vilken typ av serverkontroll som helst i en WebPartZoneBase zon kan användas) som ska vara providern måste implementera det gränssnitt som skapades i det första steget.

  3. Identifiera en motringningsmetod. En metod i providern måste identifieras som återanropsmetod för att upprätta en anslutning. Den här metoden returnerar en instans av det implementerade gränssnittet till en konsument. Metoden Webbdelar för att identifiera en motringningsmetod i providern är att lägga till ett ConnectionProvider metadataattribut (definierat av ConnectionProviderAttribute klassen) till metoden som returnerar gränssnittsinstansen. När attributet läggs till är den enda obligatoriska parametern ett visningsnamn som ska användas för provideranslutningspunkten. Valfria parametrar kan också läggas till, till exempel ett ID för anslutningspunkten.

När en kontroll har utrustats för att fungera som leverantör kan kontrollen delta i anslutningar (förutsatt att en konsumentkontroll är lika utrustad och tillgänglig). Utvecklare kan använda <asp:webpartconnection> elementet för att skapa en statisk, deklarativ anslutning i markering av en webbsida. ConnectionProvider Om attributet i providerns källkod som identifierar motringningsmetoden anger ett ID för anslutningspunkten måste det värdet tilldelas attributet ProviderConnectionPointID i elementet <asp:webpartconnection> på en sida. En orsak till att en utvecklare kan ange ett ID för en provideranslutningsplats är om det finns flera anslutningspunkter i providerkontrollen. Om ett ID inte har angetts för provideranslutningspunkten i providerkontrollen behöver inget värde tilldelas till ProviderConnectionPointID attributet på sidan heller, eftersom anslutningen skapas med ett standardvärde som hämtas från DefaultID fältet.

För att skapa en anslutning i kod måste utvecklare skapa ett nytt ProviderConnectionPoint objekt genom att anropa GetProviderConnectionPoints metoden och skicka ID:t för providerkontrollen till den, tillsammans med ID:t eller indexet för det definierade ProviderConnectionPoint objektet i providerkontrollen. Det returnerade ProviderConnectionPoint objektet, tillsammans med en referens till providerkontrollen, en referens till konsumentkontrollen och ett motsvarande ConsumerConnectionPoint objekt, skickas alla till ConnectWebParts metoden för att skapa ett nytt WebPartConnection objekt.

Även om utvecklare kan använda provideranslutningsplatser som en del av att upprätta anslutningar antingen deklarativt eller programmatiskt, kan användarna också interagera med provideranslutningsplatser för att upprätta anslutningar via användargränssnittet (UI). Om utvecklare deklarerar en ConnectionsZone kontroll på en webbsida, tillhandahåller den ett körningsgränssnitt som användarna kan använda för att skapa anslutningar. Om användarna väljer konsumentkontrollen som startpunkt för att upprätta anslutningen genom att klicka på dess anslutningsverb (de kan också välja providern, det finns ingen skillnad i den resulterande anslutningen), i användargränssnittet visas en listruta med visningsnamnet för den tillgängliga provideranslutningspunkten (eller punkter om det finns flera). Användare måste välja en provideranslutningsplats för att skapa en anslutning.

Ett ProviderConnectionPoint objekt associeras direkt med en specifik providerkontroll och lagrar information om en anslutning i de egenskaper som ärver från basklassen ConnectionPoint . I den ärvda InterfaceType egenskapen behåller till exempel en provideranslutningsplats den typ av gränssnitt som returneras av providern. Om både providern och konsumenten i en anslutning fungerar med samma gränssnittstyp är kontrollerna kompatibla och kan bilda en direktanslutning. Om providern och konsumenten inte kan arbeta med samma gränssnittstyp är de inkompatibla och måste använda ett WebPartTransformer objekt för att översätta provideranslutningspunktens InterfaceType värde till en typ som konsumenten kan arbeta med. En annan viktig ärvd egenskap är egenskapen DisplayName , som ger ett eget namn att visa i användargränssnittet så att användarna kan välja en provideranslutningsplats när de skapar anslutningar. Visningsnamnet är den obligatoriska parametern när utvecklare lägger till ett ConnectionProvider attribut till motringningsmetoden i en providerkontroll. Den ärvda ID egenskapen är också användbar, som anges ovan, eftersom den ger en unik identifierare för en provideranslutningsplats om en provider har flera anslutningspunkter. En provider kan ha flera ProviderConnectionPoint objekt definierade i den, och i det här fallet, när utvecklare lägger till ConnectionProvider attributet till en metod, bör de ange ett ID-värde för att särskilja varje anslutningspunkt. En annan viktig ärvd egenskap är egenskapen AllowsMultipleConnections , som anger om en provideranslutningspunkt kan ansluta samtidigt till flera konsumenter. Det här egenskapsvärdet är true som standard för provideranslutningspunkter (medan det är standard för false konsumentanslutningspunkter).

Klassen ProviderConnectionPoint lägger till flera unika metoder till de medlemmar som den ärver från ConnectionPoint klassen. Metoden GetObject hämtar en instans av gränssnittet som återanropsmetoden returnerar till konsumenterna. Metoden GetSecondaryInterfaces hämtar ytterligare konsumentgränssnitt som ingår i en befintlig anslutning, men som inte är de gränssnitt som används för att upprätta anslutningen.

Konstruktorer

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

Initierar en ny instans av ProviderConnectionPoint klassen.

Egenskaper

Name Description
AllowsMultipleConnections

Hämtar ett värde som anger om en anslutningspunkt stöder flera samtidiga anslutningar.

(Ärvd från ConnectionPoint)
ControlType

Hämtar serverkontrollen Type som en anslutningspunkt är associerad med.

(Ärvd från ConnectionPoint)
DisplayName

Hämtar en sträng som fungerar som ett eget visningsnamn för att representera en anslutningspunkt i användargränssnittet (UI).

(Ärvd från ConnectionPoint)
ID

Hämtar en sträng som innehåller identifieraren för en anslutningspunkt.

(Ärvd från ConnectionPoint)
InterfaceType

Hämtar den typ av gränssnitt som används av en anslutningspunkt.

(Ärvd från ConnectionPoint)

Metoder

Name Description
Equals(Object)

Avgör om det angivna objektet är lika med det aktuella objektet.

(Ärvd från Object)
GetEnabled(Control)

Returnerar ett värde som anger om en anslutningspunkt kan delta i anslutningar.

(Ärvd från ConnectionPoint)
GetHashCode()

Fungerar som standard-hash-funktion.

(Ärvd från Object)
GetObject(Control)

Anropar motringningsmetoden i en providerkontroll som hämtar en gränssnittsinstans för att återgå till konsumenter.

GetSecondaryInterfaces(Control)

Hämtar en valfri samling sekundära gränssnitt som kan stödjas av en provideranslutningspunkt.

GetType()

Hämtar den aktuella instansen Type .

(Ärvd från Object)
MemberwiseClone()

Skapar en ytlig kopia av den aktuella Object.

(Ärvd från Object)
ToString()

Returnerar en sträng som representerar det aktuella objektet.

(Ärvd från Object)

Gäller för

Se även