ProviderConnectionPoint クラス

定義

プロバイダーとして動作するサーバー コントロールがコンシューマーとの接続を形成できるようにする、コネクション ポイント オブジェクトを定義します。

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
継承
ProviderConnectionPoint

次のコード例は、各ケースでプロバイダー接続ポイントを使用して、宣言的、プログラム的、または UI を介して接続を作成する簡単な方法を示しています。

この例には、次の 4 つの部分があります。

  • ページの Web パーツ表示モードを変更できるユーザー コントロール。

  • インターフェイスのソース コードと、接続のプロバイダーとコンシューマーとして機能する 2 つの WebPart コントロール。

  • すべてのコントロールをホストし、コード例を実行する Web ページ。

  • サンプル ページを実行する方法の説明。

このコード例の最初の部分は、ユーザーが Web ページの表示モードを変更できるようにするユーザー コントロールです。 次のソース コードを .ascx ファイルに保存します。このユーザー コントロールの ディレクティブの Register 属性にSrc割り当てられたファイル名を指定します。この名前は、ホスト Web ページの上部付近にあります。 このコントロールの表示モードとソース コードの説明の詳細については、「 チュートリアル: 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>

コード例の 2 番目の部分は、インターフェイスとコントロールのソース コードです。 ソース ファイルには、 という名前 IZipCodeの単純なインターフェイスが含まれています。 インターフェイスを実装し、 WebPart プロバイダー コントロールとして機能する という名前 ZipCodeWebPart のクラスもあります。 その ProvideIZipCode メソッドは、インターフェイスの唯一のメンバーを実装するコールバック メソッドです。 メソッドは、インターフェイスのインスタンスを返すだけです。 メソッドは、そのメタデータに 属性で ConnectionProvider マークされていることに注意してください。 これは、プロバイダーの接続ポイントのコールバック メソッドとして メソッドを識別するためのメカニズムです。 もう 1 つの WebPart クラスは という名前 WeatherWebPartで、接続のコンシューマーとして機能します。 このクラスには、 という名前 GetZipCode のメソッドがあり、プロバイダー コントロールからインターフェイスの IZipCode インスタンスを取得します。 このメソッドは、メタデータに 属性を持つ ConnectionConsumer コンシューマーの接続ポイント メソッドとしてマークされていることに注意してください。 これは、コンシューマー コントロール内の接続ポイント メソッドを識別するためのメカニズムです。

コード例を実行するには、このソース コードをコンパイルする必要があります。 明示的にコンパイルし、結果のアセンブリを Web サイトの Bin フォルダーまたはグローバル アセンブリ キャッシュに配置できます。 または、ソース コードをサイトの App_Code フォルダーに配置して、実行時に動的にコンパイルすることもできます。 このコード例では、動的コンパイルを使用します。 コンパイル方法を示すチュートリアルについては、「 チュートリアル: カスタム Web サーバー コントロールの開発と使用」を参照してください。

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

コード例の 3 番目の部分は Web ページです。 上部には、 Register 接続を形成するカスタム コントロールを登録するためのディレクティブと、ユーザーがページ上の表示モードを変更できるようにするユーザー コントロールがあります。 接続自体は、ページ上の 要素内で <staticconnections> 宣言的に作成されます。 これは、接続を作成する方法の 1 つを示しています。要素の 属性をProviderConnectionPointID<asp:webpartconnection>メモします。 プログラムで接続を作成することもできます。これを行うためのコードは、 メソッドにあります Button1_Click 。 この場合、 ProviderConnectionPoint オブジェクトが作成され、実際の接続を作成するメソッドに渡されます。 接続を宣言的に作成するかプログラムで作成するかに関係なく、プロバイダーとコンシューマーの両方に接続ポイントを常に指定する必要があります。 メソッドは Button2_Click 、プロバイダーとコンシューマーの ConnectionPoint 両方のオブジェクトにアクセスし、そのプロパティ値の一部をページ内のラベルに書き込みます。

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

ブラウザーでページを読み込んだ後、[ 接続ポイントの詳細 ] ボタンをクリックします。 宣言接続で確立されたプロバイダーとコンシューマー接続ポイントに関する情報が表示されます。 次に、[ 表示モード ] ドロップダウン コントロールを使用して、ページを接続モードに切り替えます。 ZIP Code ConsumerWebPart コントロール (タイトル バーの下向き矢印で表される) の動詞メニューで、connect 動詞をクリックします。 接続 UI が表示され、ページで宣言されたコントロールによって <asp:connectionszone> 自動的に作成されます。 これは、(UI を介して) 接続を作成するもう 1 つの方法であり、前に説明した宣言メソッドとプログラムによるメソッドです。 [ 切断 ] ボタンをクリックして、既存の静的接続を終了します。 [ プロバイダーへの接続の作成 ] リンクをクリックします。 UI に、プロバイダー接続ポイントの表示名を一覧表示するドロップダウン コントロールが表示されるようになりました。 ドロップダウン リストで接続ポイントを選択し、[ 接続 ] をクリックして接続を完了します。 次に、もう一度 [ 切断 ] をクリックします。 次に、[ 動的接続 ] ボタンをクリックして、プログラムによって接続を作成します。 表示モード コントロールを使用して、ページを参照モードに戻します。 もう一度 [ 接続ポイントの詳細 ] ボタンをクリックして、プロバイダーの接続ポイント オブジェクトに関する詳細をもう一度示します。

この例では、接続を確立し、プロバイダー接続ポイントを使用する方法を 3 つの方法で示しました。Web ページ マークアップで宣言された静的接続です。オブジェクトを使用 ProviderConnectionPoint するコードで作成された接続と、接続 UI を介してユーザーによって作成された接続。

注釈

2 つのサーバー コントロール間のすべての Web パーツ接続では、各コントロールに関連付けられた接続ポイント オブジェクトが必要です。これにより、コントロールが接続のプロバイダーまたはコンシューマーとして指定されているかどうかに応じて、他のコントロールに接続したり、データを提供または使用したりできます。 ConnectionPointオブジェクトには、一般に、コントロールを別のコントロールに接続する方法と、コントロールが共有できるデータの種類の詳細が含まれています。 接続でプロバイダーとして機能するコントロールの場合、その接続ポイントは オブジェクトである ProviderConnectionPoint 必要があります。 Web パーツの接続と接続ポイントの詳細については、以下の「関連項目」セクションに記載されているトピックを参照してください。

オブジェクトを ProviderConnectionPoint 作成するには、いくつかの手順が必要です。

  1. インターフェイスを作成します。 プロバイダーがコンシューマーとデータを共有する場合は、インターフェイスのインスタンスを取得し、そのインスタンスをコンシューマーに返します。

  2. プロバイダーに インターフェイスを実装します。 WebPartプロバイダーになるまたはその他のサーバー コントロール (ゾーン内WebPartZoneBaseの任意の種類のサーバー コントロールを使用できます) は、最初の手順で作成されたインターフェイスを実装する必要があります。

  3. コールバック メソッドを識別します。 接続を確立するには、プロバイダー内のメソッドをコールバック メソッドとして識別する必要があります。 このメソッドは、実装されたインターフェイスのインスタンスをコンシューマーに返します。 プロバイダーでコールバック メソッドを識別するための Web パーツのアプローチは、インターフェイス インスタンスを返すメソッドにメタデータ属性 (クラスによってConnectionProviderAttribute定義) を追加ConnectionProviderすることです。 属性を追加するときに必要なパラメーターは、プロバイダー接続ポイントに使用する表示名のみです。 接続ポイントの ID など、省略可能なパラメーターを追加することもできます。

コントロールがプロバイダーとして機能するように設定された後、コントロールは接続に参加できます (コンシューマー コントロールが同様に装備され、使用可能であると仮定)。 Web ページのマークアップで静的な宣言接続を作成するには、 要素を <asp:webpartconnection> 使用できます。 コールバック メソッドを ConnectionProvider 識別するプロバイダー ソース コードの 属性が接続ポイントの ID を指定する場合は、その値を ProviderConnectionPointID ページの 要素の <asp:webpartconnection> 属性に割り当てる必要があります。 開発者がプロバイダー接続ポイントの ID を指定する理由の 1 つは、プロバイダー コントロールに複数の接続ポイントがある場合です。 プロバイダー コントロールのプロバイダー接続ポイントに ID が指定されていない場合、フィールドからDefaultID取得したProviderConnectionPointID既定値を使用して接続が作成されるため、値をページの 属性に割り当てる必要はありません。

コードで接続を作成するには、開発者は、 メソッドを呼び出GetProviderConnectionPointsし、プロバイダー コントロールの ID とプロバイダー コントロールの定義済ProviderConnectionPointみオブジェクトの ID またはインデックスを渡すことによって、新しいProviderConnectionPointオブジェクトを作成する必要があります。 返された ProviderConnectionPoint オブジェクトと、プロバイダー コントロールへの参照、コンシューマー コントロールへの参照、および対応する ConsumerConnectionPoint オブジェクトはすべて、 メソッドに ConnectWebParts 渡され、新しい WebPartConnection オブジェクトが作成されます。

開発者は、宣言またはプログラムによる接続の確立の一環としてプロバイダー接続ポイントを使用できますが、ユーザーはプロバイダー接続ポイントと対話して、ユーザー インターフェイス (UI) を介して接続を確立することもできます。 開発者が Web ページでコントロールを ConnectionsZone 宣言すると、ユーザーが接続を作成するためのランタイム UI が提供されます。 ユーザーが接続動詞をクリックして接続を確立するための開始点としてコンシューマー コントロールを選択した場合 (プロバイダーを選択することもできます。結果の接続に違いはありません)、UI には、使用可能なプロバイダー接続ポイントの表示名 (または複数の接続ポイントがある場合はポイント) を含むドロップダウン リスト コントロールが表示されます。 接続を作成するには、プロバイダー接続ポイントを選択する必要があります。

オブジェクトは ProviderConnectionPoint 、特定のプロバイダー コントロールに直接関連付け、基底 ConnectionPoint クラスから継承するプロパティに接続に関する詳細を格納します。 たとえば、継承された InterfaceType プロパティでは、プロバイダー接続ポイントはプロバイダーによって返されるインターフェイスの種類を保持します。 接続のプロバイダーとコンシューマーの両方が同じインターフェイス型で動作する場合、コントロールは互換性があり、直接接続を形成できます。 プロバイダーとコンシューマーが同じインターフェイス型で動作できない場合は、互換性がないため、 オブジェクトを WebPartTransformer 使用して、プロバイダー接続ポイントの InterfaceType 値をコンシューマーが操作できる型に変換する必要があります。 もう 1 つの重要な継承プロパティは DisplayName 、 プロパティで、ユーザーが接続の作成時にプロバイダー接続ポイントを選択できるように UI に表示するフレンドリ名を提供します。 表示名は、開発者がプロバイダー コントロールのコールバック メソッドに属性を追加 ConnectionProvider するときに必要なパラメーターです。 継承された ID プロパティは、プロバイダーに複数の接続ポイントがある場合にプロバイダー接続ポイントの一意識別子を提供するため、上記のように便利です。 プロバイダーには複数 ProviderConnectionPoint のオブジェクトを定義できます。この場合、開発者がメソッドに 属性を ConnectionProvider 追加するときは、各接続ポイントを区別するために ID 値を指定する必要があります。 もう 1 つの重要な継承プロパティは AllowsMultipleConnections 、 プロパティです。これは、プロバイダー接続ポイントが複数のコンシューマーに同時に接続できるかどうかを示します。 このプロパティ値は、プロバイダー接続ポイントの場合は true 既定でです (コンシューマー接続ポイントの false 場合は 既定値です)。

クラスは ProviderConnectionPoint 、 クラスから継承するメンバーにいくつかの一意のメソッドを ConnectionPoint 追加します。 メソッドは GetObject 、コールバック メソッドがコンシューマーに返すインターフェイスのインスタンスを取得します。 メソッドは GetSecondaryInterfaces 、既存の接続の一部である追加のコンシューマー インターフェイスを取得しますが、接続の確立に使用されるインターフェイスではありません。

コンストラクター

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

ProviderConnectionPoint クラスの新しいインスタンスを初期化します。

プロパティ

AllowsMultipleConnections

コネクション ポイントが同時に複数の接続をサポートするかどうかを示す値を取得します。

(継承元 ConnectionPoint)
ControlType

コネクション ポイントが関連付けられているサーバー コントロールの Type を取得します。

(継承元 ConnectionPoint)
DisplayName

ユーザー インターフェイス (UI) でコネクション ポイントを表す表示名として使用される文字列を取得します。

(継承元 ConnectionPoint)
ID

コネクション ポイントの識別子を含む文字列を取得します。

(継承元 ConnectionPoint)
InterfaceType

コネクション ポイントによって使用されるインターフェイスの型を取得します。

(継承元 ConnectionPoint)

メソッド

Equals(Object)

指定されたオブジェクトが現在のオブジェクトと等しいかどうかを判断します。

(継承元 Object)
GetEnabled(Control)

コネクション ポイントが接続に参加できるかどうかを示す値を取得します。

(継承元 ConnectionPoint)
GetHashCode()

既定のハッシュ関数として機能します。

(継承元 Object)
GetObject(Control)

コンシューマーに返すインターフェイス インスタンスを取得する、プロバイダー コントロールのコールバック メソッドを呼び出します。

GetSecondaryInterfaces(Control)

プロバイダー コネクション ポイントによってサポートされるセカンダリ インターフェイスの、オプションのコレクションを取得します。

GetType()

現在のインスタンスの Type を取得します。

(継承元 Object)
MemberwiseClone()

現在の Object の簡易コピーを作成します。

(継承元 Object)
ToString()

現在のオブジェクトを表す文字列を返します。

(継承元 Object)

適用対象

こちらもご覧ください