WebPartManager.CanConnectWebParts Метод

Определение

Проверяет элементы управления WebPart, которые будут участвовать в подключении, для определения, способны ли они подключаться друг к другу.

Перегрузки

CanConnectWebParts(WebPart, ProviderConnectionPoint, WebPart, ConsumerConnectionPoint)

Проверяет элементы управления WebPart, которые будут участвовать в подключении, для определения, способны ли они подключаться друг к другу, если элементы управления поставщика и получателя имеют совместимые интерфейсы, а объект WebPartTransformer не требуется.

CanConnectWebParts(WebPart, ProviderConnectionPoint, WebPart, ConsumerConnectionPoint, WebPartTransformer)

Проверяет элементы управления WebPart, которые будут участвовать в подключении, для определения, смогут ли они подключаться, а также использует объект WebPartTransformer для создания подключения между несовместимыми поставщиками и получателями.

Комментарии

Этот CanConnectWebParts метод используется для определения возможности подключения двух WebPart элементов управления. Метод обычно используется в качестве условной проверки перед вызовом ConnectWebParts метода.

Метод CanConnectWebParts проверяет ряд критериев, которые должны быть выполнены, прежде чем два элемента управления могут сформировать соединение. В следующем списке перечислены основные критерии создания соединения. Если выполняются все эти критерии (а также некоторые дополнительные внутренние условия), метод возвращает значение true, то есть элементы управления могут быть подключены:

  • Поставщик и элементы управления потребителем не могут быть null, и они должны содержаться в коллекции элементов управления, на которые ссылается WebParts свойство.

  • Поставщик и потребитель не могут быть одинаковыми. Другими словами, WebPart элемент управления не может подключиться к себе.

  • Объекты ConnectionPoint (точки подключения) для поставщика и потребителя не могут быть null.

  • Поставщик и потребитель не могут быть закрыты (ни свойство элемента управления IsClosed не может быть true).

  • Свойство ControlType элемента управления "Точка подключения" должно соответствовать типу элемента управления как потребителем, так и поставщиком.

  • Точки подключения должны быть включены (их GetEnabled методы должны возвращать оба trueзначения).

  • Каждая точка подключения не должна пытаться сформировать больше подключений, чем указано в собственном AllowsMultipleConnections свойстве.

  • WebPartTransformer Если для подключения несовместимых элементов управления требуется объект (преобразователь), он не может бытьnull. Однако если элементы управления уже совместимы, преобразователь должен быть null.

  • Преобразователь (если используется) должен ссылаться в AvailableTransformers коллекции.

  • Преобразователь (если используется) должен иметь интерфейсы, совместимые с поставщиком и потребителем, чтобы он смог преобразовывать данные между двумя элементами управления. Кроме того, вторичные интерфейсы потребителя и поставщика должны быть совместимыми.

CanConnectWebParts(WebPart, ProviderConnectionPoint, WebPart, ConsumerConnectionPoint)

Проверяет элементы управления WebPart, которые будут участвовать в подключении, для определения, способны ли они подключаться друг к другу, если элементы управления поставщика и получателя имеют совместимые интерфейсы, а объект WebPartTransformer не требуется.

public:
 bool CanConnectWebParts(System::Web::UI::WebControls::WebParts::WebPart ^ provider, System::Web::UI::WebControls::WebParts::ProviderConnectionPoint ^ providerConnectionPoint, System::Web::UI::WebControls::WebParts::WebPart ^ consumer, System::Web::UI::WebControls::WebParts::ConsumerConnectionPoint ^ consumerConnectionPoint);
public bool CanConnectWebParts (System.Web.UI.WebControls.WebParts.WebPart provider, System.Web.UI.WebControls.WebParts.ProviderConnectionPoint providerConnectionPoint, System.Web.UI.WebControls.WebParts.WebPart consumer, System.Web.UI.WebControls.WebParts.ConsumerConnectionPoint consumerConnectionPoint);
member this.CanConnectWebParts : System.Web.UI.WebControls.WebParts.WebPart * System.Web.UI.WebControls.WebParts.ProviderConnectionPoint * System.Web.UI.WebControls.WebParts.WebPart * System.Web.UI.WebControls.WebParts.ConsumerConnectionPoint -> bool
Public Function CanConnectWebParts (provider As WebPart, providerConnectionPoint As ProviderConnectionPoint, consumer As WebPart, consumerConnectionPoint As ConsumerConnectionPoint) As Boolean

Параметры

provider
WebPart

Элемент управления, который предоставляет данные для consumer при подключенных элементах управления.

providerConnectionPoint
ProviderConnectionPoint

Точка подключения ConnectionPoint, которая позволяет provider участвовать в подключении.

consumer
WebPart

Элемент управления, который получает данные из provider при подключенных элементах управления.

consumerConnectionPoint
ConsumerConnectionPoint

Точка подключения ConnectionPoint, которая выполняет функцию метода обратного вызова, чтобы consumer мог участвовать в подключении.

Возвращаемое значение

Boolean

Логическое значение, указывающее, можно ли подключить друг к другу provider и consumer.

Примеры

В следующем примере кода показано, как использовать этот метод.

Пример кода состоит из четырех частей:

  • Пользовательский элемент управления, позволяющий изменять режимы отображения на странице веб-части.

  • Веб-страница, содержащая два пользовательских WebPart элемента управления, которые можно подключить, <asp:webpartmanager> элемент и код обработки событий, создающий соединение с помощью CanConnectWebParts метода.

  • Файл исходного кода, содержащий два пользовательских WebPart элемента управления и пользовательский интерфейс.

  • Объяснение того, как работает пример в браузере.

Первая часть примера кода — это пользовательский элемент управления для изменения режимов отображения. Исходный код пользовательского элемента управления можно получить из раздела "Пример" в обзоре WebPartManager класса. Дополнительные сведения о режимах отображения и о том, как работает пользовательский элемент управления, см. в пошаговом руководстве: изменение режимов отображения на странице веб-части.

Декларативная разметка для веб-страницы содержит Register директивы для пользовательского элемента управления и пользовательских элементов управления. Существует <asp:webpartmanager> элемент, элемент, <asp:webpartzone> содержащий пользовательские элементы управления и <asp:connectionszone> элемент. Обратите внимание, что в методе Page_Load код проверяет, может ли соединение быть сделано, и, если да, определяет поставщика, потребителя и соответствующие точки подключения, а затем добавляет новое подключение к набору статических соединений, на которые ссылается StaticConnections свойство.

<%@ Page Language="C#" %>
<%@ register TagPrefix="uc1" 
  TagName="DisplayModeMenuCS" 
  Src="DisplayModeMenuCS.ascx" %>
<%@ register tagprefix="aspSample" 
  Namespace="Samples.AspNet.CS.Controls" 
  Assembly="ConnectionSampleCS"%>

<!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 Page_Load(object sender, EventArgs e)
  {
    
    // Define provider, consumer, and connection points.
    WebPart provider = mgr.WebParts["zip1"];
    ProviderConnectionPoint provConnPoint =
      mgr.GetProviderConnectionPoints(provider)["ZipCodeProvider"];
    WebPart consumer = mgr.WebParts["weather1"];
    ConsumerConnectionPoint consConnPoint =
      mgr.GetConsumerConnectionPoints(consumer)["ZipCodeConsumer"];
    
    // Check whether the connection already exists.
    if (mgr.CanConnectWebParts(provider, provConnPoint,
      consumer, consConnPoint))
    {
      // Create a new static connection.
      WebPartConnection conn = new WebPartConnection();
      conn.ID = "staticConn1";
      conn.ConsumerID = "weather1";
      conn.ConsumerConnectionPointID = "ZipCodeConsumer";
      conn.ProviderID = "zip1";
      conn.ProviderConnectionPointID = "ZipCodeProvider";
      mgr.StaticConnections.Add(conn);
    }
 }

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>ASP.NET Example</title>
</head>
<body>
    <form id="form1" runat="server">
      <!-- Reference the WebPartManager control. -->
      <asp:WebPartManager ID="mgr" runat="server" />   
    <div>
      <uc1:DisplayModeMenuCS ID="displaymode1" 
        runat="server" />
      <!-- Reference consumer and provider controls 
           in a zone. -->
      <asp:WebPartZone ID="WebPartZone1" runat="server">
        <ZoneTemplate>
          <aspSample:ZipCodeWebPart ID="zip1" 
            runat="server" 
            Title="Zip Code Control"/>
          <aspSample:WeatherWebPart ID="weather1" 
            runat="server" 
            Title="Weather Control" />
        </ZoneTemplate>
      </asp:WebPartZone>
      <hr />
      <!-- Add a ConnectionsZone so users can connect 
           controls. -->
      <asp:ConnectionsZone ID="ConnectionsZone1" 
        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" 
  Assembly="ConnectionSampleVB"%>

<!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 Page_Load(ByVal sender As Object, _
    ByVal e As System.EventArgs)
    
    ' Define provider, consumer, and connection points.
    Dim provider As WebPart = mgr.WebParts("zip1")
    Dim provConnPoint As ProviderConnectionPoint = _
      mgr.GetProviderConnectionPoints(provider)("ZipCodeProvider")
    Dim consumer As WebPart = mgr.WebParts("weather1")
    Dim consConnPoint As ConsumerConnectionPoint = _
      mgr.GetConsumerConnectionPoints(consumer)("ZipCodeConsumer")
    
    ' Check whether the connection already exists.
    If mgr.CanConnectWebParts(provider, provConnPoint, _
      consumer, consConnPoint) Then
      ' Create a new static connection.
      Dim conn As New WebPartConnection()
      conn.ID = "staticConn1"
      conn.ConsumerID = "weather1"
      conn.ConsumerConnectionPointID = "ZipCodeConsumer"
      conn.ProviderID = "zip1"
      conn.ProviderConnectionPointID = "ZipCodeProvider"
      mgr.StaticConnections.Add(conn)
    End If
    
  End Sub
  
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>ASP.NET Example</title>
</head>
<body>
    <form id="form1" runat="server">
      <!-- Reference the WebPartManager control. -->
      <asp:WebPartManager ID="mgr" runat="server" />   
    <div>
      <uc1:DisplayModeMenuVB ID="displaymode1" 
        runat="server" />
      <!-- Reference consumer and provider controls 
           in a zone. -->
      <asp:WebPartZone ID="WebPartZone1" runat="server">
        <ZoneTemplate>
          <aspSample:ZipCodeWebPart ID="zip1" 
            runat="server" 
            Title="Zip Code Control"/>
          <aspSample:WeatherWebPart ID="weather1" 
            runat="server" 
            Title="Weather Control" />
        </ZoneTemplate>
      </asp:WebPartZone>
      <hr />
      <!-- Add a ConnectionsZone so users can connect 
           controls. -->
      <asp:ConnectionsZone ID="ConnectionsZone1" 
        runat="server" />
    </div>
    </form>
</body>
</html>

Третья часть примера — исходный код для элементов управления. Он содержит интерфейс и два пользовательских WebPart элемента управления, один выступает в качестве поставщика, а другой — как потребитель. Так как они имеют совместимые точки подключения (оба они распознают IZipCode интерфейс), преобразователь не требуется для подключения. Для запуска примера кода необходимо скомпилировать этот исходный код. Его можно скомпилировать явным образом и поместить результирующая сборка в папку bin веб-сайта или глобальный кэш сборок. Кроме того, исходный код можно поместить в папку App_Code сайта, где он будет динамически компилироваться во время выполнения. Пошаговое руководство, демонстрирующее компиляцию, см. в разделе "Пошаговое руководство. Разработка и использование пользовательского веб-сервера".

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", "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", "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", "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", "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

После загрузки веб-страницы в браузере щелкните раскрывающийся список режима отображения и выберите Подключение, чтобы переключить страницу в режим подключения. Подключение режим использует <asp:connectionszone> элемент для создания соединений между элементами управления. В режиме подключения щелкните стрелку вниз в строке заголовка элемента управления ZIP-кода, чтобы активировать меню глаголов, а затем щелкните Подключение. После появления пользовательского интерфейса подключения обратите внимание, что подключение уже создано кодом, содержащимся в методе Page_Load .

Комментарии

Этот метод используется для подключения provider и consumer когда оба элемента управления имеют совместимые типы точек подключения, чтобы WebPartTransformer объект не нужен. Этот метод может потребоваться использовать, чтобы убедиться, что перед вызовом ConnectWebParts программного подключения можно подключить два элемента управления.

Эта перегрузка использует ту же реализацию, что и перегрузка CanConnectWebParts(WebPart, ProviderConnectionPoint, WebPart, ConsumerConnectionPoint, WebPartTransformer) метода, за исключением того, что эта перегрузка не требует преобразователя.

См. также раздел

Применяется к

CanConnectWebParts(WebPart, ProviderConnectionPoint, WebPart, ConsumerConnectionPoint, WebPartTransformer)

Проверяет элементы управления WebPart, которые будут участвовать в подключении, для определения, смогут ли они подключаться, а также использует объект WebPartTransformer для создания подключения между несовместимыми поставщиками и получателями.

public:
 virtual bool CanConnectWebParts(System::Web::UI::WebControls::WebParts::WebPart ^ provider, System::Web::UI::WebControls::WebParts::ProviderConnectionPoint ^ providerConnectionPoint, System::Web::UI::WebControls::WebParts::WebPart ^ consumer, System::Web::UI::WebControls::WebParts::ConsumerConnectionPoint ^ consumerConnectionPoint, System::Web::UI::WebControls::WebParts::WebPartTransformer ^ transformer);
public virtual bool CanConnectWebParts (System.Web.UI.WebControls.WebParts.WebPart provider, System.Web.UI.WebControls.WebParts.ProviderConnectionPoint providerConnectionPoint, System.Web.UI.WebControls.WebParts.WebPart consumer, System.Web.UI.WebControls.WebParts.ConsumerConnectionPoint consumerConnectionPoint, System.Web.UI.WebControls.WebParts.WebPartTransformer transformer);
abstract member CanConnectWebParts : System.Web.UI.WebControls.WebParts.WebPart * System.Web.UI.WebControls.WebParts.ProviderConnectionPoint * System.Web.UI.WebControls.WebParts.WebPart * System.Web.UI.WebControls.WebParts.ConsumerConnectionPoint * System.Web.UI.WebControls.WebParts.WebPartTransformer -> bool
override this.CanConnectWebParts : System.Web.UI.WebControls.WebParts.WebPart * System.Web.UI.WebControls.WebParts.ProviderConnectionPoint * System.Web.UI.WebControls.WebParts.WebPart * System.Web.UI.WebControls.WebParts.ConsumerConnectionPoint * System.Web.UI.WebControls.WebParts.WebPartTransformer -> bool
Public Overridable Function CanConnectWebParts (provider As WebPart, providerConnectionPoint As ProviderConnectionPoint, consumer As WebPart, consumerConnectionPoint As ConsumerConnectionPoint, transformer As WebPartTransformer) As Boolean

Параметры

provider
WebPart

Элемент управления, который предоставляет данные для consumer при подключенных элементах управления.

providerConnectionPoint
ProviderConnectionPoint

Точка подключения ConnectionPoint, которая выполняет функцию метода обратного вызова, чтобы provider мог участвовать в подключении.

consumer
WebPart

Элемент управления, который получает данные из provider при подключенных элементах управления.

consumerConnectionPoint
ConsumerConnectionPoint

Точка подключения ConnectionPoint, которая выполняет функцию метода обратного вызова, чтобы consumer мог участвовать в подключении.

transformer
WebPartTransformer

Объект WebPartTransformer, который позволяет подключать несовместимые объекты provider и consumer.

Возвращаемое значение

Boolean

Логическое значение, указывающее, можно ли подключить друг к другу provider и consumer.

Комментарии

Этот метод используется для подключения provider и consumer когда оба элемента управления имеют несовместимые типы точек подключения, чтобы WebPartTransformer требуется объект. Этот метод может потребоваться использовать, чтобы убедиться, что перед вызовом ConnectWebParts программного подключения можно подключить два элемента управления.

Эта перегрузка использует ту же реализацию, что и перегрузка CanConnectWebParts(WebPart, ProviderConnectionPoint, WebPart, ConsumerConnectionPoint) метода, при этом единственным исключением является то, что для этой перегрузки требуется преобразователь.

Применяется к