ConsumerConnectionPoint クラス

定義

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

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

次のコード例は、コンシューマー接続ポイントを使用して、宣言的、プログラム的、または 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 のクラスもあります。 もう 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 つを示しています。要素の 属性をConsumerConnectionPointID<asp:webpartconnection>メモします。 プログラムで接続を作成することもできます。これを行うためのコードは メソッドにあります Button1_Click 。 この場合、 ConsumerConnectionPoint オブジェクトが作成され、実際の接続を作成するメソッドに渡されます。 接続が宣言的に作成されるかプログラムによって作成されるかに関係なく、接続ポイントは常にプロバイダーとコンシューマーの両方に指定する必要があります。 メソッドは 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>

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

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

注釈

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

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

  1. コンシューマー コントロールがインターフェイス インスタンスを参照できるようにします。 WebPartまたは他のサーバー コントロール (ゾーンにWebPartZoneBase追加される任意の種類のサーバー コントロールを使用できる) は、特定のインターフェイス インスタンスのデータを使用できる必要があります。 コントロールは インターフェイスを実装する必要はありません。プロバイダーのみが実装する必要があります。 コンシューマーは、プロバイダーによって提供される正確なインターフェイス型を操作するか、そうでない場合は、オブジェクトを WebPartTransformer 使用して、プロバイダーのインターフェイス型からコンシューマーが認識する型にデータを変換できます。 コンシューマーを有効にする一般的な方法は、目的のインターフェイス型への参照を含むプライベート フィールドを宣言することです。

  2. コールバック メソッドを識別します。 プロバイダーとの接続を確立するには、コンシューマー内のメソッドをコールバック メソッドとして識別する必要があります。 このメソッドは、プロバイダーが実装するインターフェイスのインスタンスを取得し、最初の手順で作成したプライベート フィールドに割り当てます (たとえば)。 コンシューマー内のコールバック メソッドを識別するための Web パーツ アプローチは、(クラスによって定義される) メタデータ属性をConnectionConsumerAttribute、インターフェイス インスタンスを受け取るメソッドに追加ConnectionConsumerすることです。 属性を追加する場合、必要なパラメーターはコンシューマー接続ポイントに使用する表示名のみです。 省略可能なパラメーター (ID など) を追加することもできます。

  3. インターフェイス インスタンスからデータを処理して出力します。 データに対して必要に応じて内部処理を実行し、通常はコンシューマー コントロールによってデータがページにレンダリングされます。 これを行う一般的な方法は、コントロールの OnPreRender メソッドをオーバーライドすることです。

    注意

    同期要求の間、コンシューマーはイベントの実行中または直後にプロバイダーに直接データを要求する PreRender 必要があります。 非同期要求中に、レンダリング中にプロバイダーのコールバック メソッドが呼び出されない場合、開発者はコンシューマーにデータが送信されなかったと想定できます。

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

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

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

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

クラスは ConsumerConnectionPoint 、 クラスから継承するメンバーにいくつかの一意のメソッドを ConnectionPoint 追加します。 メソッドは SetObject 、コンシューマー独自に定義されたコールバック メソッドを呼び出して、プロバイダーからインターフェイス インスタンスを取得します。 メソッドは SupportsConnection 、関連付けられたコンシューマー コントロールの現在の状態に基づいて、接続ポイントが接続を確立できるかどうかを示すブール値を返します。

コンストラクター

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

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

プロパティ

AllowsMultipleConnections

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

(継承元 ConnectionPoint)
ControlType

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

(継承元 ConnectionPoint)
DisplayName

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

(継承元 ConnectionPoint)
ID

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

(継承元 ConnectionPoint)
InterfaceType

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

(継承元 ConnectionPoint)

メソッド

Equals(Object)

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

(継承元 Object)
GetEnabled(Control)

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

(継承元 ConnectionPoint)
GetHashCode()

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

(継承元 Object)
GetType()

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

(継承元 Object)
MemberwiseClone()

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

(継承元 Object)
SetObject(Control, Object)

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

SupportsConnection(Control, ConnectionInterfaceCollection)

コンシューマー接続ポイントが現在接続を確立できるかどうかを判断します。

ToString()

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

(継承元 Object)

適用対象

こちらもご覧ください