Condividi tramite


WebPartManager.CanConnectWebParts Metodo

Definizione

Verifica i controlli WebPart che prenderanno parte a una connessione per determinare se possono essere connessi.

Overload

CanConnectWebParts(WebPart, ProviderConnectionPoint, WebPart, ConsumerConnectionPoint)

Verifica i controlli WebPart che prenderanno parte a una connessione per determinare se possono essere connessi, quando i controlli consumer e provider dispongono di interfacce compatibili e non è necessario un oggetto WebPartTransformer.

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

Verifica i controlli WebPart che prenderanno parte a una connessione per determinare se è possibile connetterli e utilizza un oggetto WebPartTransformer per creare la connessione tra un consumer incompatibile e un provider.

Commenti

Il CanConnectWebParts metodo viene utilizzato per determinare se è possibile connettere due WebPart controlli. Il metodo viene in genere usato come controllo condizionale prima di chiamare il ConnectWebParts metodo .

Il CanConnectWebParts metodo controlla un certo numero di criteri che devono essere soddisfatti prima che due controlli possano formare una connessione. L'elenco seguente riepiloga i criteri principali per stabilire una connessione. Se vengono soddisfatti tutti questi criteri (più alcune condizioni interne aggiuntive), il metodo restituisce true, ovvero che i controlli possono essere connessi:

  • Il provider e i controlli consumer non possono essere nulle devono essere contenuti nell'insieme di controlli a cui fa riferimento la WebParts proprietà .

  • Il provider e il consumer non possono essere lo stesso controllo. In altre parole, un WebPart controllo non può connettersi a se stesso.

  • Gli ConnectionPoint oggetti (punti di connessione) per il provider e il consumer non possono essere null.

  • Il provider e il consumer non possono essere chiusi (nessuna delle proprietà del IsClosed controllo può essere true).

  • La ControlType proprietà del controllo del punto di connessione deve corrispondere al tipo del controllo sia del consumer che del provider.

  • I punti di connessione devono essere abilitati entrambi (i relativi GetEnabled metodi devono restituire trueentrambi ).

  • Ogni punto di connessione non deve tentare di formare più connessioni rispetto a quanto specificato nella relativa AllowsMultipleConnections proprietà.

  • Se è necessario un WebPartTransformer oggetto (trasformatore) per connettere controlli incompatibili, non può essere null. Tuttavia, se i controlli sono già compatibili, il trasformatore deve essere null.

  • È necessario fare riferimento al trasformatore (se utilizzato) nell'insieme AvailableTransformers .

  • Il trasformatore (se usato) deve avere interfacce compatibili con il provider e il consumer in modo che possa trasformare i dati tra i due controlli. Anche le interfacce secondarie del consumer e del provider devono essere compatibili.

CanConnectWebParts(WebPart, ProviderConnectionPoint, WebPart, ConsumerConnectionPoint)

Verifica i controlli WebPart che prenderanno parte a una connessione per determinare se possono essere connessi, quando i controlli consumer e provider dispongono di interfacce compatibili e non è necessario un oggetto 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

Parametri

provider
WebPart

Controllo che fornisce dati al controllo consumer quando i controlli sono connessi.

providerConnectionPoint
ProviderConnectionPoint

Classe ConnectionPoint che consente al controllo provider di prendere parte a una connessione.

consumer
WebPart

Controllo che riceve dati dal controllo provider quando i controlli sono connessi.

consumerConnectionPoint
ConsumerConnectionPoint

Classe ConnectionPoint che funge da metodo di callback in modo che il controllo consumer possa prendere parte a una connessione.

Restituisce

Valore Boolean che indica se i controlli provider e consumer possono essere connessi.

Esempio

Nell'esempio di codice seguente viene illustrato come usare questo metodo.

L'esempio di codice ha quattro parti:

  • Controllo utente che consente di modificare le modalità di visualizzazione in una pagina web part.

  • Pagina Web che contiene due controlli personalizzati WebPart che possono essere connessi, un <asp:webpartmanager> elemento e un codice di gestione degli eventi che crea una connessione usando il CanConnectWebParts metodo .

  • File di codice sorgente che contiene due controlli personalizzati WebPart e un'interfaccia personalizzata.

  • Spiegazione del funzionamento dell'esempio in un browser.

La prima parte dell'esempio di codice è il controllo utente per modificare le modalità di visualizzazione. È possibile ottenere il codice sorgente per il controllo utente dalla sezione Esempio della panoramica della WebPartManager classe. Per altre informazioni sulle modalità di visualizzazione e sul funzionamento del controllo utente, vedere Procedura dettagliata: Modifica delle modalità di visualizzazione in una pagina web part.

Il markup dichiarativo per la pagina Web contiene Register direttive sia per il controllo utente che per i controlli personalizzati. È presente un <asp:webpartmanager> elemento , un <asp:webpartzone> elemento che contiene i controlli personalizzati e un <asp:connectionszone> elemento . Si noti che nel metodo il Page_Load codice controlla se è possibile stabilire la connessione e, in tal caso, definisce un provider, un consumer e i rispettivi punti di connessione e quindi aggiunge una nuova connessione al set di connessioni statiche a cui fa riferimento la StaticConnections proprietà .

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

La terza parte dell'esempio è il codice sorgente per i controlli. Contiene un'interfaccia e due controlli personalizzati WebPart , uno che funge da provider e l'altro come consumer. Poiché hanno punti di connessione compatibili (entrambi riconoscono l'interfaccia IZipCode ), non è necessario un trasformatore per stabilire la connessione. Per eseguire l'esempio di codice, è necessario compilare questo codice sorgente. È possibile compilarlo in modo esplicito e inserire l'assembly risultante nella cartella Bin del sito Web o nella Global Assembly Cache. In alternativa, è possibile inserire il codice sorgente nella cartella App_Code del sito, in cui verrà compilato in modo dinamico in fase di esecuzione. Per una procedura dettagliata che illustra come eseguire la compilazione, vedere Procedura dettagliata: sviluppo e uso di un controllo server Web personalizzato.

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

Dopo aver caricato la pagina Web in un browser, fare clic sul controllo elenco a discesa Modalità di visualizzazione e selezionare Connetti per passare alla modalità di connessione. La modalità di connessione usa l'elemento <asp:connectionszone> per consentire di creare connessioni tra i controlli. In modalità di connessione fare clic sulla freccia rivolta verso il basso nella barra del titolo del controllo CAP per attivare il menu dei verbi e quindi fare clic su Connetti. Dopo aver visualizzato l'interfaccia utente di connessione, si noti che una connessione è già stata creata dal codice contenuto nel Page_Load metodo .

Commenti

Questo metodo viene usato per connettersi provider e consumer quando entrambi i controlli hanno tipi di punti di connessione compatibili, in modo che un WebPartTransformer oggetto non sia necessario. È possibile usare questo metodo per verificare che due controlli possano essere connessi prima di chiamare ConnectWebParts per creare una connessione a livello di codice.

Questo overload usa la stessa implementazione dell'overload del CanConnectWebParts(WebPart, ProviderConnectionPoint, WebPart, ConsumerConnectionPoint, WebPartTransformer) metodo, con l'unica eccezione che questo overload non richiede un trasformatore.

Vedi anche

Si applica a

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

Verifica i controlli WebPart che prenderanno parte a una connessione per determinare se è possibile connetterli e utilizza un oggetto WebPartTransformer per creare la connessione tra un consumer incompatibile e un provider.

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

Parametri

provider
WebPart

Controllo che fornisce dati al controllo consumer quando i controlli sono connessi.

providerConnectionPoint
ProviderConnectionPoint

Classe ConnectionPoint che funge da metodo di callback in modo che il controllo provider possa prendere parte a una connessione.

consumer
WebPart

Controllo che riceve dati dal controllo provider quando i controlli sono connessi.

consumerConnectionPoint
ConsumerConnectionPoint

Classe ConnectionPoint che funge da metodo di callback in modo che il controllo consumer possa prendere parte a una connessione.

transformer
WebPartTransformer

Classe WebPartTransformer che consente la connessione tra un provider incompatibile e un consumer.

Restituisce

Valore Boolean che indica se i controlli provider e consumer possono formare una connessione.

Commenti

Questo metodo viene usato per connettersi provider e consumer quando entrambi i controlli hanno tipi di punti di connessione incompatibili, in modo che sia necessario un WebPartTransformer oggetto . È possibile usare questo metodo per verificare che due controlli possano essere connessi prima di chiamare ConnectWebParts per creare una connessione a livello di codice.

Questo overload usa la stessa implementazione dell'overload del CanConnectWebParts(WebPart, ProviderConnectionPoint, WebPart, ConsumerConnectionPoint) metodo, con l'unica eccezione che questo overload richiede un trasformatore.

Si applica a