Sdílet prostřednictvím


WebPartManager.CanConnectWebParts Metoda

Definice

Zkontroluje WebPart ovládací prvky, které se budou podílet na připojení, a určí, jestli se dají připojit.

Přetížení

CanConnectWebParts(WebPart, ProviderConnectionPoint, WebPart, ConsumerConnectionPoint)

Zkontroluje WebPart ovládací prvky, které se budou podílet na připojení, a určí, jestli se dají připojit, když ovládací prvky příjemce a zprostředkovatel mají kompatibilní rozhraní a WebPartTransformer objekt není potřeba.

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

Zkontroluje WebPart ovládací prvky, které se budou podílet na připojení, a určí, jestli se dají připojit, a použije WebPartTransformer objekt k vytvoření připojení mezi nekompatibilním příjemcem a poskytovatelem.

Poznámky

Metoda CanConnectWebParts se používá k určení, zda lze připojit dva WebPart ovládací prvky. Metoda se obvykle používá jako podmíněná kontrola před voláním ConnectWebParts metody.

Metoda CanConnectWebParts kontroluje řadu kritérií, která musí být splněna, aby dva ovládací prvky mohly vytvořit připojení. Následující seznam shrnuje primární kritéria pro vytvoření připojení. Pokud jsou splněna všechna tato kritéria (plus některé další interní podmínky), vrátí metoda hodnotu true, což znamená, že ovládací prvky lze připojit:

  • Ovládací prvky zprostředkovatele a příjemce nemohou být nulla musí být obsaženy v kolekci ovládacích prvků, na které WebParts vlastnost odkazuje.

  • Zprostředkovatel a příjemce nemohou být stejné řízení. Jinými slovy, ovládací prvek se WebPart nemůže připojit sám k sobě.

  • Objekty ConnectionPoint (spojovací body) pro poskytovatele i příjemce nemohou být null.

  • Zprostředkovatel a příjemce nelze zavřít (vlastnost ovládacího prvku IsClosed nemůže být true).

  • Vlastnost ControlType ovládacího prvku spojovacího bodu musí odpovídat typu ovládacího prvku příjemce i poskytovatele.

  • Musí být povoleny oba spojovací body (jejich GetEnabled metody musí vracet true).

  • Každý spojovací bod se nesmí pokoušet vytvořit více připojení, než je uvedeno v jeho vlastní AllowsMultipleConnections vlastnosti.

  • Pokud se pro připojení nekompatibilních WebPartTransformer ovládacích prvků vyžaduje objekt (transformátor), nemůže to být null. Pokud jsou však ovládací prvky již kompatibilní, musí být nulltransformátor .

  • Na transformátor (pokud je použit) musí být odkazován v kolekci AvailableTransformers .

  • Transformátor (pokud je použit) musí mít rozhraní, která jsou kompatibilní s poskytovatelem a příjemcem, aby mohl transformovat data mezi dvěma ovládacími prvky. Musí být kompatibilní také sekundární rozhraní příjemce a poskytovatele.

CanConnectWebParts(WebPart, ProviderConnectionPoint, WebPart, ConsumerConnectionPoint)

Zkontroluje WebPart ovládací prvky, které se budou podílet na připojení, a určí, jestli se dají připojit, když ovládací prvky příjemce a zprostředkovatel mají kompatibilní rozhraní a WebPartTransformer objekt není potřeba.

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

Parametry

provider
WebPart

Ovládací prvek, který poskytuje data při consumer připojení ovládacích prvků.

providerConnectionPoint
ProviderConnectionPoint

A ConnectionPoint , která umožňuje provider účastnit se připojení.

consumer
WebPart

Ovládací prvek, který přijímá data z provider , když jsou ovládací prvky připojeny.

consumerConnectionPoint
ConsumerConnectionPoint

A ConnectionPoint , který funguje jako metoda zpětného volání, consumer aby se mohl účastnit připojení.

Návraty

Logická hodnota, která označuje, zda provider a consumer lze připojit.

Příklady

Následující příklad kódu ukazuje, jak použít tuto metodu.

Příklad kódu má čtyři části:

  • Uživatelský ovládací prvek, který umožňuje měnit režimy zobrazení na stránce webových částí.

  • Webová stránka, která obsahuje dva vlastní WebPart ovládací prvky, které lze připojit, <asp:webpartmanager> prvek a kód zpracování událostí, který vytváří připojení pomocí CanConnectWebParts metody.

  • Soubor zdrojového kódu, který obsahuje dva vlastní WebPart ovládací prvky a vlastní rozhraní.

  • Vysvětlení fungování příkladu v prohlížeči

První částí příkladu kódu je uživatelský ovládací prvek pro změnu režimů zobrazení. Zdrojový kód pro uživatelský ovládací prvek můžete získat v části Příklad přehledu WebPartManager třídy. Další informace o režimech zobrazení a fungování uživatelského ovládacího prvku najdete v tématu Návod: Změna režimů zobrazení na stránce webových částí.

Deklarativní kód webové stránky obsahuje Register direktivy pro uživatelský ovládací prvek i vlastní ovládací prvky. Existuje element <asp:webpartmanager> , element, který <asp:webpartzone> obsahuje vlastní ovládací prvky, a <asp:connectionszone> element. Všimněte si, že v Page_Load metodě kód zkontroluje, jestli je možné vytvořit připojení, a pokud ano, definuje zprostředkovatele, příjemce a příslušné spojovací body a pak přidá nové připojení do sady statických připojení, na která StaticConnections vlastnost odkazuje.

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

Třetí částí příkladu je zdrojový kód ovládacích prvků. Obsahuje rozhraní a dva vlastní WebPart ovládací prvky, jeden funguje jako zprostředkovatel a druhý jako příjemce. Vzhledem k tomu, že mají kompatibilní spojovací body (oba rozpoznávají IZipCode rozhraní), není k vytvoření připojení potřeba transformátor. Aby se příklad kódu spustil, musíte tento zdrojový kód zkompilovat. Můžete ho explicitně zkompilovat a umístit výsledné sestavení do složky Bin webu nebo globální mezipaměti sestavení . Případně můžete zdrojový kód umístit do složky App_Code webu, kde se bude dynamicky kompilovat za běhu. Návod, který ukazuje, jak kompilovat, najdete v tématu Návod: Vývoj a použití vlastního ovládacího prvku webového serveru.

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

Po načtení webové stránky v prohlížeči klikněte na ovládací prvek rozevíracího seznamu Režim zobrazení a výběrem možnosti Připojit přepněte stránku do režimu připojení. Režim připojení používá <asp:connectionszone> element k vytvoření připojení mezi ovládacími prvky. V režimu připojení klikněte na šipku dolů v záhlaví ovládacího prvku PSČ , aby se aktivovala nabídka sloves, a pak klikněte na Připojit. Jakmile se zobrazí uživatelské rozhraní (UI) připojení, všimněte si, že již bylo vytvořeno připojení kódem obsaženým Page_Load v metodě.

Poznámky

Tato metoda se používá k připojení provider a consumer pokud oba ovládací prvky mají kompatibilní typy spojovacích bodů, takže WebPartTransformer objekt není potřeba. Tuto metodu můžete použít k ověření, že se před voláním ConnectWebParts za účelem vytvoření programového připojení dají připojit dva ovládací prvky.

Toto přetížení používá stejnou implementaci jako CanConnectWebParts(WebPart, ProviderConnectionPoint, WebPart, ConsumerConnectionPoint, WebPartTransformer) přetížení metody, s jedinou výjimkou je, že toto přetížení nevyžaduje transformátor.

Viz také

Platí pro

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

Zkontroluje WebPart ovládací prvky, které se budou podílet na připojení, a určí, jestli se dají připojit, a použije WebPartTransformer objekt k vytvoření připojení mezi nekompatibilním příjemcem a poskytovatelem.

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

Parametry

provider
WebPart

Ovládací prvek, který poskytuje data při consumer připojení ovládacích prvků.

providerConnectionPoint
ProviderConnectionPoint

A ConnectionPoint , který funguje jako metoda zpětného volání, provider aby se mohl účastnit připojení.

consumer
WebPart

Ovládací prvek, který přijímá data z provider , když jsou ovládací prvky připojeny.

consumerConnectionPoint
ConsumerConnectionPoint

A ConnectionPoint , který funguje jako metoda zpětného volání, consumer aby se mohl účastnit připojení.

transformer
WebPartTransformer

A WebPartTransformer , která umožňuje nekompatibilnímu provider a consumer připojit se.

Návraty

Logická hodnota, která označuje, jestli provider a consumer může vytvořit připojení.

Poznámky

Tato metoda se používá k připojení provider a consumer pokud oba ovládací prvky mají nekompatibilní typy spojovacích bodů, takže WebPartTransformer objekt je vyžadován. Tuto metodu můžete použít k ověření, že se před voláním ConnectWebParts za účelem vytvoření programového připojení dají připojit dva ovládací prvky.

Toto přetížení používá stejnou implementaci jako CanConnectWebParts(WebPart, ProviderConnectionPoint, WebPart, ConsumerConnectionPoint) přetížení metody, s jedinou výjimkou je, že toto přetížení vyžaduje transformátor.

Platí pro