WebPartConnection Classe

Definizione

Fornisce un oggetto che consente a due controlli WebPart di creare una connessione. La classe non può essere ereditata.

public ref class WebPartConnection sealed
[System.ComponentModel.TypeConverter(typeof(System.ComponentModel.ExpandableObjectConverter))]
public sealed class WebPartConnection
[<System.ComponentModel.TypeConverter(typeof(System.ComponentModel.ExpandableObjectConverter))>]
type WebPartConnection = class
Public NotInheritable Class WebPartConnection
Ereditarietà
WebPartConnection
Attributi

Esempio

Nell'esempio di codice seguente viene illustrato come creare una connessione semplice tra due WebPart controlli. L'esempio illustra tre modi per formare una connessione: in modo dichiarativo, inserendo tag per la connessione nel markup della pagina Web; a livello di codice, creando la connessione nel codice; e tramite l'interfaccia utente, inserendo un ConnectionsZone controllo nella pagina, che consente agli utenti di stabilire una connessione.

L'esempio di codice ha quattro parti:

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

  • Codice sorgente per un'interfaccia e due WebPart controlli che fungono da provider e consumer per una connessione.

  • Una pagina Web per ospitare tutti i controlli ed eseguire l'esempio di codice.

  • Spiegazione di come eseguire la pagina di esempio.

La prima parte di questo esempio di codice è il controllo utente che consente agli utenti di modificare le modalità di visualizzazione in una pagina Web. Salvare il codice sorgente seguente in un file con estensione ascx, assegnandogli il nome file assegnato all'attributo Src della Register direttiva per questo controllo utente, che si trova nella parte superiore della pagina Web di hosting. Per informazioni dettagliate sulle modalità di visualizzazione e una descrizione del codice sorgente in questo controllo, vedere Procedura dettagliata: Modifica delle modalità di visualizzazione in una pagina Web part.

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

La seconda parte dell'esempio di codice è il codice sorgente per l'interfaccia e i controlli. Il file di origine contiene un'interfaccia semplice denominata IZipCode. Esiste anche una WebPart classe denominata ZipCodeWebPart che implementa l'interfaccia e funge da controllo del provider. Il metodo ProvideIZipCode è il metodo di callback che implementa l'unico membro dell'interfaccia. Il metodo restituisce semplicemente un'istanza dell'interfaccia. Si noti che il metodo è contrassegnato con un ConnectionProvider attributo nei relativi metadati. Si tratta del meccanismo per identificare il metodo come metodo di callback per il punto di connessione del provider. L'altra WebPart classe è denominata WeatherWebParte funge da consumer per la connessione. Questa classe ha un metodo denominato GetZipCode che ottiene un'istanza dell'interfaccia IZipCode dal controllo provider. Si noti che questo metodo viene contrassegnato come metodo del punto di connessione del consumer con un ConnectionConsumer attributo nei relativi metadati.

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. In questo esempio di codice viene usata la compilazione dinamica. 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 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

La terza parte dell'esempio di codice è la pagina Web. Nella parte superiore sono presenti le Register direttive per il controllo utente e i controlli personalizzati WebPart . Poiché nell'esempio si presuppone la compilazione dinamica dei controlli, il codice sorgente per i controlli deve trovarsi in una sottocartella App_Code; il Register tag nella pagina fa riferimento solo a un prefisso di tag arbitrario e allo spazio dei nomi dei controlli. I controlli personalizzati WebPart (provider e consumer) vengono dichiarati all'interno dell'elemento della pagina Web, all'interno di <asp:webpartzone> un <zonetemplate> elemento .

La pagina offre tre modi per formare una connessione tra i controlli personalizzati. Il primo metodo è dichiarativo. Nel markup per la pagina viene dichiarato un <StaticConnections> elemento e all'interno di questo è un <asp:WebPartConnections> elemento, con i vari dettagli del consumer e del provider della connessione specificata come attributi. Si tratta di un modo per creare una connessione, dichiarandola direttamente nella pagina Web, in particolare all'interno dell'elemento <asp:WebPartManager> . A causa di questa connessione statica, viene creata immediatamente una connessione tra i due controlli personalizzati al primo caricamento della pagina.

Un secondo metodo per formare una connessione tra i controlli viene fornito dall'elemento <asp:connectionszone> nella pagina. Se un utente passa una pagina alla modalità di visualizzazione di connessione in fase di esecuzione e fa clic su un verbo di connessione in uno dei controlli personalizzati, l'elemento <asp:connectionszone> esegue automaticamente il rendering dell'interfaccia utente per la creazione di una connessione.

La pagina illustra anche un terzo modo per creare una connessione, operazione che consiste nell'eseguire questa operazione a livello di codice. Button1_Click Nel metodo il codice crea un ProviderConnectionPoint oggetto per il controllo del provider e recupera i dettagli del punto di connessione chiamando il GetProviderConnectionPoints metodo . Esegue un'attività simile per il controllo consumer, chiamando il GetConsumerConnectionPoints metodo . Infine, crea il nuovo WebPartConnection oggetto chiamando il ConnectWebParts metodo sul WebPartManager controllo .

<%@ 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"];
    WebPartConnection conn1 = mgr.ConnectWebParts(zip1, provPoint,
      weather1, connPoint);
  }

  protected void mgr_DisplayModeChanged(object sender, 
    WebPartDisplayModeEventArgs e)
  {
    if (mgr.DisplayMode == WebPartManager.ConnectDisplayMode)
      Button1.Visible = true;
    else
      Button1.Visible = false;
  }
</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" 
    OnDisplayModeChanged="mgr_DisplayModeChanged">
        <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="Connect WebPart Controls" 
        OnClick="Button1_Click" 
    Visible="false" />
    </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")
    mgr.ConnectWebParts(zip1, provPoint, weather1, connPoint)

  End Sub

  Protected Sub mgr_DisplayModeChanged (ByVal sender as Object, _
    ByVal e as WebPartDisplayModeEventArgs)

    If mgr.DisplayMode Is WebPartManager.ConnectDisplayMode Then
    Button1.Visible = True
    Else
    Button1.Visible = False
    End If

  End Sub
</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" 
    OnDisplayModeChanged="mgr_DisplayModeChanged">
        <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="Connect WebPart Controls" 
        OnClick="Button1_Click" 
    Visible="false" />
    </div>
    </form>
</body>
</html>

Dopo aver caricato la pagina Web in un browser, la prima connessione esiste già perché è dichiarata all'interno dell'elemento <StaticConnections> . Immettere un testo nel controllo Provider di cap e verrà visualizzato nel controllo consumer. Disconnettere quindi i due controlli. Usando il controllo elenco a discesa Modalità di visualizzazione, modificare la pagina per connettere la modalità di visualizzazione. Fare clic sul menu dei verbi (rappresentato da una freccia rivolta verso il basso nella barra del WebPart titolo) per ognuno dei controlli e notare che ognuna ha un'opzione Connetti . Si tratta di un verbo di connessione, che viene visualizzato nel menu verbi solo quando la pagina è in modalità di connessione. Fare clic sul verbo di connessione in uno dei controlli e viene visualizzata l'interfaccia utente di connessione fornita dal ConnectionsZone controllo . Fare clic sul pulsante Disconnetti per terminare la connessione statica tra i controlli. Utilizzare il controllo Modalità di visualizzazione per restituire la pagina in modalità di esplorazione. Provare a immettere di nuovo del nuovo testo nel provider e notare che, poiché i controlli sono disconnessi, il testo non viene aggiornato nel controllo consumer.

Successivamente, usare lo stesso metodo precedente per attivare di nuovo la modalità di visualizzazione di connessione della pagina. Fare clic su un verbo di connessione in uno dei controlli. Fare clic sul collegamento Crea una connessione e usare l'interfaccia utente fornita dal ConnectionsZone controllo per creare una connessione tra i controlli. Questo è il secondo metodo per la creazione di una connessione. Si noti che non appena viene creata la connessione, l'ultima stringa immessa nel controllo del provider (che non è stata visualizzata perché i controlli sono stati disconnessi) viene improvvisamente visualizzata nel consumer, perché la connessione è stata ricreata. Fare clic sul pulsante Disconnetti per terminare la connessione corrente appena creata. Restituisce la pagina per la modalità di esplorazione. Immettere un nuovo testo nel provider per dimostrare che il testo non viene aggiornato e che i controlli vengono nuovamente disconnessi.

Restituisce la pagina per connettere la modalità di visualizzazione. Invece di fare clic su un verbo di connessione, fare clic sul pulsante Connetti controlli WebPart , che illustra il terzo metodo di creazione di una connessione. Questo approccio connette i controlli a livello di codice in un unico passaggio semplice senza dover usare il ConnectionsZone controllo . Si noti che quando viene creata la connessione, l'ultima stringa immessa nel provider viene improvvisamente visualizzata nel controllo consumer.

Commenti

Nel set di controlli Web part una connessione è un collegamento o un'associazione tra due WebPart controlli (o altri server o utente) che consentono di condividere i dati. Questa possibilità di condividere i dati consente l'uso dei controlli connessi in modi che superano le funzionalità offerte dai controlli isolati. Ad esempio, se un controllo fornisce i dati del codice postale e un altro controllo può leggere tali dati e fornire informazioni meteo locali in base al codice postale, la funzionalità connessa dei due controlli fornisce più valore agli utenti. Per estendere questo esempio, è possibile creare altri controlli che visualizzano anche informazioni basate su un codice postale, ad esempio un controllo con collegamenti a notizie locali, e tutti questi controlli che possono funzionare con i dati del codice postale possono condividere dati con il singolo controllo che fornisce un codice postale. Gli utenti finali delle applicazioni Web part possono creare e gestire connessioni tra tutti questi controlli compatibili direttamente da un Web browser, usando l'interfaccia utente delle connessioni standard fornita dal ConnectionsZone controllo o un'interfaccia utente personalizzata fornita da uno sviluppatore.

Questa WebPartConnection panoramica della classe è un'istruzione generale dei dettagli di base per la creazione di una connessione. Per altre informazioni su componenti e requisiti specifici relativi alla creazione di connessioni, vedere Panoramica delle connessioni web part o vedere le classi di riferimento e gli esempi di codice menzionati nella discussione seguente. Esistono diversi aspetti fondamentali di una connessione web part:

  • Due WebPart controlli. Ogni connessione web part è costituita da due controlli. È possibile che un controllo partecipi contemporaneamente a più connessioni, ma ogni singola connessione è costituita da esattamente due controlli. I controlli possono derivare direttamente dalla WebPart classe di base oppure possono essere altri controlli server, inclusi i controlli ASP.NET, i controlli server personalizzati e i controlli utente. I controlli che non derivano dalla WebPart classe, se inseriti in un WebPartZoneBase fuso, vengono automaticamente sottoposti a wrapping con un GenericWebPart oggetto in fase di esecuzione, che consente loro di ereditare dalla WebPart classe e di funzionare come controlli di runtime WebPart .

  • Controlli che risiedono in WebPartZoneBase zone. Entrambi WebPart i controlli e qualsiasi altro tipo di controllo server devono risiedere in una WebPartZoneBase zona per poter partecipare alle connessioni web part (e la maggior parte delle altre funzionalità web part).

  • Consumer e provider. In ogni connessione web part sono presenti due controlli: un provider di dati e un consumer di dati. Il provider fornisce dati al consumer tramite un metodo di callback specificato che restituisce dati sotto forma di interfaccia. Per un esempio di come creare e specificare il metodo di callback, vedere la sezione Esempio di questo argomento. Questo metodo di callback è noto come punto di connessione del provider. I dettagli di questo punto di connessione (nome "descrittivo", un ID e il tipo dell'interfaccia restituita) sono contenuti in un ProviderConnectionPoint oggetto associato al controllo del provider. Il consumer riceve i dati tramite un metodo specificato che può accettare un'istanza dell'interfaccia. Questo metodo è noto come punto di connessione consumer e i dettagli del punto di connessione (nome, ID e tipo di interfaccia) sono contenuti in un ConsumerConnectionPoint oggetto associato al controllo consumer.

  • Controlli compatibili o un trasformatore valido. Per il funzionamento di una connessione, il consumer e il provider devono essere compatibili (ovvero che i metodi del punto di connessione specificati possono funzionare con lo stesso tipo di interfaccia) o deve essere presente un WebPartTransformer oggetto in grado di tradurre il tipo offerto dal provider in un tipo compreso dal consumer.

  • Un oggetto WebPartConnection. Affinché esista una connessione, è necessario che sia presente un'istanza WebPartConnection della classe che contiene riferimenti al provider e ai controlli consumer, insieme ai dettagli dei punti di connessione. Se il provider e il consumer non sono compatibili e invece usano un WebPartTransformer oggetto per connettersi, la connessione fa riferimento al trasformatore.

  • Mezzo di stabilire la connessione. Dopo aver progettato correttamente i controlli consumer e provider compatibili con i metodi del punto di connessione e inseriti in una zona e un WebPartConnection oggetto è disponibile, l'ultimo passaggio di base necessario consiste nell'avviare la connessione. In questo modo è possibile che gli utenti creino la connessione tramite l'interfaccia utente. Se si inserisce un <asp:connectionszone> elemento nella pagina e gli altri componenti necessari per una connessione sono presenti, in fase di esecuzione un utente può cambiare la pagina in modalità di visualizzazione connessa, fare clic su un verbo di connessione nel menu verbi del provider o del consumer e verrà visualizzata un'interfaccia utente di connessione (in base al ConnectionsZone controllo). Tramite questa interfaccia utente, l'utente può avviare la connessione. Un altro modo per avviare la connessione consiste nel farlo a livello di codice. In entrambi i casi, se tramite l'interfaccia utente o a livello di codice, il metodo sottostante che avvia la connessione è lo stesso. L'applicazione chiama il ConnectWebParts metodo (o il ConnectWebParts metodo se si usa un trasformatore) WebPartManager sul controllo, passando al provider, al consumer e ai rispettivi oggetti punto di connessione e il metodo restituisce un WebPartConnection oggetto.

La WebPartConnection classe definisce un oggetto che incapsula i dettagli essenziali di una connessione tra due WebPart controlli. La classe è costituita quasi interamente da proprietà correlate ai dettagli di una determinata connessione. Diverse proprietà riguardano il controllo consumer in una connessione. La Consumer proprietà fa riferimento al controllo consumer stesso e la ConsumerID proprietà fa riferimento all'ID del consumer. L'oggetto ConsumerConnectionPoint , che contiene i dettagli del punto di connessione del consumer, viene fatto riferimento alla proprietà del ConsumerConnectionPoint consumer. La ConsumerConnectionPointID proprietà fa riferimento all'ID dell'oggetto ConsumerConnectionPoint . Tutte queste proprietà di connessione correlate al consumer devono avere un valore assegnato a loro per creare una connessione.

La WebPartConnection classe include anche diverse proprietà correlate al controllo del provider in una connessione e queste corrispondono alle proprietà per un consumer. La Provider proprietà fa riferimento al controllo provider stesso, mentre la ProviderID proprietà fa riferimento al relativo ID. La ProviderConnectionPoint proprietà fa riferimento all'oggetto ProviderConnectionPoint e la ProviderConnectionPointID proprietà fa riferimento all'ID del punto di connessione del provider.

Diverse proprietà riguardano lo stato della connessione. La IsActive proprietà indica se la connessione è attiva (attualmente scambiando dati) o inattiva (ancora connessa ma non condivide attivamente i dati). La IsShared proprietà indica se la connessione è una connessione condivisa (disponibile per tutti gli utenti di una pagina) o una connessione specifica dell'utente e la IsStatic proprietà indica se il controllo è statico (dichiarato nel markup della pagina e quindi permanente) o dinamico (creato a livello di codice, significa che può essere eliminato).

Costruttori

WebPartConnection()

Inizializza una nuova istanza della classe WebPartConnection.

Proprietà

Consumer

Ottiene un oggetto WebPart che funge da controllo consumer in una connessione.

ConsumerConnectionPoint

Ottiene l'oggetto che funge da punto di connessione per un controllo consumer in una connessione.

ConsumerConnectionPointID

Ottiene o imposta il valore della proprietà in una connessione che fa riferimento all'ID dell'oggetto che funge da punto di connessione consumer per la connessione.

ConsumerID

Ottiene o imposta il valore della proprietà in una connessione che fa riferimento all'ID del controllo WebPart che funge da consumer per la connessione.

ID

Ottiene o imposta l'ID di un oggetto WebPartConnection.

IsActive

Ottiene un valore che indica se al momento è stato stabilito un oggetto WebPartConnection ed è possibile scambiare i dati tra i relativi controlli provider e consumer.

IsShared

Ottiene un valore che indica se un oggetto WebPartConnection è visibile a tutti gli utenti o solo all'utente corrente.

IsStatic

Ottiene un valore che indica se un oggetto WebPartConnection è dichiarato nel markup di una pagina Web o creato a livello di codice.

Provider

Ottiene un controllo WebPart che funge da provider in una connessione web part.

ProviderConnectionPoint

Ottiene l'oggetto che funge da punto di connessione per un controllo WebPart provider per una connessione.

ProviderConnectionPointID

Ottiene o imposta il valore della proprietà in una connessione che fa riferimento all'ID dell'oggetto che funge da punto di connessione provider per la connessione.

ProviderID

Ottiene o imposta il valore della proprietà in una connessione che fa riferimento all'ID del controllo WebPart che funge da provider per la connessione

Transformer

Ottiene un oggetto WebPartTransformer utilizzato per trasformare i dati tra due punti di connessione altrimenti incompatibili in una connessione web part.

Transformers

Ottiene un insieme di oggetti WebPartTransformer utilizzati internamente dall'insieme di controlli Web part.

Metodi

Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.

(Ereditato da Object)
GetHashCode()

Funge da funzione hash predefinita.

(Ereditato da Object)
GetType()

Ottiene l'oggetto Type dell'istanza corrente.

(Ereditato da Object)
MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.

(Ereditato da Object)
ToString()

Esegue l'override del metodo ToString() ereditato e restituisce un nome breve del tipo per l'oggetto connessione.

Si applica a

Vedi anche