ProxyWebPartManager Classe

Definizione

Consente agli sviluppatori di dichiarare connessioni statiche in una pagina contenuto quando è stato dichiarato un controllo WebPartManager nella pagina master associata alla pagina contenuto.

public ref class ProxyWebPartManager : System::Web::UI::Control
[System.ComponentModel.Bindable(false)]
public class ProxyWebPartManager : System.Web.UI.Control
[<System.ComponentModel.Bindable(false)>]
type ProxyWebPartManager = class
    inherit Control
Public Class ProxyWebPartManager
Inherits Control
Ereditarietà
ProxyWebPartManager
Attributi

Esempio

Nell'esempio di codice seguente viene illustrato come usare la ProxyWebPartManager classe per dichiarare connessioni statiche nelle pagine del contenuto di un'applicazione che usa pagine master. L'esempio include cinque 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.

  • Pagina Web master che ospita il controllo utente, le pagine del contenuto e il WebPartManager controllo per l'applicazione.

  • Pagina Web del contenuto che ospita un ProxyWebPartManager controllo, i due controlli personalizzati WebPart e una connessione statica per connettere i due controlli.

  • 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, assegnandole il nome del file assegnato all'attributo Src della Register direttiva per questo controllo utente, che si trova nella parte superiore della pagina master 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="&nbsp;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="&nbsp;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 ProvideIZipCode metodo è 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 è 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 dinamicamente in fase di esecuzione. Questo esempio di codice usa la compilazione dinamica. Per una procedura dettagliata che illustra come compilare, 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 master. È consigliabile accettare il codice sorgente seguente e salvarlo in un file, assegnandole la denominazione di MasterPageCS.master o MasterPageVB.master (a seconda della lingua usata). Si noti che la pagina master contiene una Register direttiva per registrare il controllo utente e fa riferimento al controllo utente stesso nel corpo della pagina. La pagina master dichiara anche l'elemento singolo <asp:webpartmanager> usato per questa pagina e tutte le pagine di contenuto correlate. Infine, la pagina master ha un <asp: contentplaceholder> elemento che dichiara il punto nella pagina in cui viene inserita la pagina del contenuto.

<%@ Master Language="C#" %>
<%@ register tagprefix="uc1" 
    tagname="DisplayModeMenuCS"
    src="~/displaymodemenucs.ascx" %>
    
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Master page with connections in content pages</title>
</head>
<body>
    <h2>Contoso, Ltd.</h2>
    <hr />
    <form id="form1" runat="server">
    <asp:webpartmanager runat="server" id="WebPartManager1" />
    <uc1:displaymodemenucs id="menu1" runat="server" />
    <div>
        <asp:contentplaceholder id="ContentPlaceHolder1" 
          runat="server" />
    </div>
    </form>
</body>
</html>
<%@ Master Language="VB" %>
<%@ register tagprefix="uc1" 
    tagname="DisplayModeMenuVB"
    src="~/displaymodemenuvb.ascx" %>
    
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Master page with connections in content pages</title>
</head>
<body>
    <h2>Contoso, Ltd.</h2>
    <hr />
    <form id="form1" runat="server">
    <asp:webpartmanager runat="server" id="WebPartManager1" />
    <uc1:displaymodemenuvb id="menu1" runat="server" />
    <div>
        <asp:contentplaceholder id="ContentPlaceHolder1" 
          runat="server" />
    </div>
    </form>
</body>
</html>

La quarta parte dell'esempio di codice è la pagina del contenuto. È necessario copiare il codice sorgente seguente e salvarlo in un file con estensione aspx. Si noti che la relativa Page direttiva contiene un MasterFile attributo da fare riferimento alla pagina master. Questa pagina include inoltre una Register direttiva per registrare il file nella cartella App_Code che contiene i controlli personalizzati WebPart compilati in modo dinamico che partecipano alla connessione. All'interno dei <asp:content> tag della pagina è presente un <asp:proxywebpartmanager> elemento, con un elemento figlio, che a sua volta ha un elemento figlio <staticconnections><asp:webpartconnection> per dichiarare i dettagli della connessione. All'interno dei <script> tag nella pagina, il Button1_Click metodo aggiunge un codice che accede al controllo principale nella pagina master WebPartManager e al ProxyWebPartManager controllo nella pagina del contenuto e scrive alcuni dei relativi dettagli nella pagina.

<%@ Page Language="C#" MasterPageFile="~/MasterPageCS.master" 
  Title="Connections Page" %>
<%@ Register TagPrefix="aspSample" 
    Namespace="Samples.AspNet.CS.Controls" %>

<script runat="server">

  protected void Button1_Click(object sender, EventArgs e)
  {
    StringBuilder lblText = new StringBuilder();
    
    if (Page.Master.FindControl("WebPartManager1") != null)
    {
      WebPartManager theMgr = 
        (WebPartManager)Page.Master.FindControl("WebPartManager1");
      lblText.Append("WebPartManager:  <br /><pre>" +
        "  Master page file is " + Page.MasterPageFile + "<br />" +
        "  ID is " + theMgr.ID + "<br />" +
        "  Connection count is " +
           theMgr.StaticConnections.Count.ToString() + "<br />" +
        "  WebParts count is " +
           theMgr.WebParts.Count.ToString() + "</pre><br />");
    }

    if (proxymgr1 != null)
    {
      lblText.Append("ProxyWebPartManager:  <br /><pre>" +
        "  Content page file is " + Request.Path + "<br />" +
        "  ID is " + proxymgr1.ID + "<br />" +
        "  Connection count is " +
           proxymgr1.StaticConnections.Count.ToString() + 
           "</pre><br />");
    }

    Literal1.Text = lblText.ToString();
    
  }
  
</script>

<asp:Content ID="Content1" Runat="Server" 
  ContentPlaceHolderID="ContentPlaceHolder1" >
 
  <asp:proxywebpartmanager id="proxymgr1" runat="server">
    <staticconnections>
      <asp:webpartconnection id="connection1" 
        consumerconnectionpointid="ZipCodeConsumer"
        consumerid="zipConsumer"
        providerconnectionpointid="ZipCodeProvider" 
        providerid="zipProvider" />
    </staticconnections>    
  </asp:proxywebpartmanager>

  <div>
  <asp:webpartzone id="zone1" runat="server">
    <zonetemplate>
      <aspsample:zipcodewebpart id="zipProvider" runat="server" 
        title="Zip Code Provider"  />
      <aspsample:weatherwebpart id="zipConsumer" runat="server" 
        title="Zip Code Consumer" />
    </zonetemplate>
  </asp:webpartzone>
  </div>
  
  <div>
  <asp:button id="Button1" runat="server" 
    text="WebPartManager Information" onclick="Button1_Click" />
  <br />
  
  </div>
  
  <asp:connectionszone id="ConnectionsZone1" runat="server" />
  <asp:literal id="Literal1" runat="server" />

</asp:Content>
<%@ Page Language="VB" MasterPageFile="~/MasterPageVB.master" 
  Title="Connections Page" %>
<%@ Register TagPrefix="aspSample" 
    Namespace="Samples.AspNet.VB.Controls" %>

<script runat="server">

  Protected Sub Button1_Click(ByVal sender As Object, _
    ByVal e As EventArgs)

    Dim lblText As StringBuilder = New StringBuilder()

    If Not (Page.Master.FindControl("WebPartManager1") Is Nothing) Then
      Dim theMgr As WebPartManager = _
        CType(Page.Master.FindControl("WebPartManager1"), WebPartManager)
      lblText.Append("WebPartManager:  <br /><pre>" & _
        "  Master page file is " & Page.MasterPageFile & "<br />" & _
        "  ID is " & theMgr.ID & "<br />" & _
        "  Connection count is " & _
           theMgr.StaticConnections.Count.ToString() & "<br />" & _
        "  WebParts count is " & _
           theMgr.WebParts.Count.ToString() & "</pre><br />")
    End If

    If Not (proxymgr1 Is Nothing) Then
      lblText.Append("ProxyWebPartManager:  <br /><pre>" & _
        "  Content page file is " & Request.Path & "<br />" & _
        "  ID is " & proxymgr1.ID & "<br />" & _
        "  Connection count is " & _
           proxymgr1.StaticConnections.Count.ToString() & "</pre><br />")
    End If

    Literal1.Text = lblText.ToString()
    
  End Sub

</script>

<asp:Content ID="Content1" Runat="Server" 
  ContentPlaceHolderID="ContentPlaceHolder1" >

  <asp:proxywebpartmanager id="proxymgr1" runat="server">
    <staticconnections>
      <asp:webpartconnection id="connection1" 
        consumerconnectionpointid="ZipCodeConsumer"
        consumerid="zipConsumer"
        providerconnectionpointid="ZipCodeProvider" 
        providerid="zipProvider" />
    </staticconnections>    
  </asp:proxywebpartmanager>

  <div>
  <asp:webpartzone id="zone1" runat="server">
    <zonetemplate>
      <aspsample:zipcodewebpart id="zipProvider" runat="server" 
        title="Zip Code Provider"  />
      <aspsample:weatherwebpart id="zipConsumer" runat="server" 
        title="Zip Code Consumer" />
    </zonetemplate>
  </asp:webpartzone>
  </div>
  
  <div>
  <asp:button id="Button1" runat="server" 
    text="WebPartManager Information" onclick="Button1_Click" />
  <br />
  <asp:literal id="Literal1" runat="server" />
  </div>
  
  <asp:connectionszone id="ConnectionsZone1" runat="server" />
  
</asp:Content>

Dopo aver caricato la pagina in un browser, fare clic sul pulsante Informazioni WebPartManager e osservare le informazioni sul WebPartManager controllo nella pagina master e sul ProxyWebPartManager controllo nella pagina del contenuto. Si noti, ad esempio, che entrambi hanno lo stesso conteggio nelle rispettive proprietà che tengono traccia delle connessioni statiche (la StaticConnections proprietà). Si noti anche che anche se il WebPartManager controllo dispone di una WebParts proprietà che tiene traccia del numero di WebPart controlli gestiti, il controllo non dispone di tale proprietà, poiché l'unico ProxyWebPartManager scopo è contenere connessioni statiche.

Commenti

Il ProxyWebPartManager controllo esiste per lo scenario specifico della dichiarazione di connessioni statiche nelle pagine del contenuto quando un WebPartManager controllo è già stato dichiarato in una pagina master.

Per progettazione, una pagina Web che usa controlli Web part deve contenere un controllo (e solo uno) WebPartManager che gestisce tutti i controlli Web part nella pagina. Quando un'applicazione Web part usa pagine master, è comune posizionare il WebPartManager controllo nella pagina master, perché tutte le pagine del contenuto vengono unite alla pagina master in fase di esecuzione e il WebPartManager singolo controllo gestirà tutti i controlli Web part da tutte le pagine del contenuto. Tuttavia, quando gli sviluppatori vogliono dichiarare connessioni statiche nelle pagine di contenuto di tale applicazione, potrebbero sembrare affrontare una limitazione. Una connessione web part statica può essere dichiarata solo aggiungendo un <asp:webpartconnection> elemento come elemento figlio di un <staticconnections> elemento, che deve essere un elemento figlio di un <asp:webpartmanager> elemento. Poiché il WebPartManager controllo è già stato dichiarato nella pagina master ed è quello consentito WebPartManager , gli sviluppatori non possono dichiarare controlli aggiuntivi WebPartManager nelle pagine del contenuto per aggiungere connessioni statiche.

Il ProxyWebPartManager controllo ha il posto del WebPartManager controllo in questo scenario. Gli sviluppatori dichiarano un elemento anziché un <asp:proxywebpartmanager><asp:webpartmanager> elemento nelle pagine del contenuto e possono quindi dichiarare connessioni statiche come elementi figlio. In fase di esecuzione, le connessioni nel ProxyWebPartManager controllo vengono semplicemente aggiunte alla StaticConnections raccolta del WebPartManager controllo e trattate come qualsiasi altra connessione.

Poiché il ProxyWebPartManager controllo viene usato solo in questo particolare scenario di sviluppo, ha funzionalità più limitate rispetto alla WebPartManager classe. Infatti, anche se il controllo funge da proxy per contenere connessioni statiche per il ProxyWebPartManagerWebPartManager controllo nelle pagine del contenuto, non eredita dal WebPartManager controllo. Eredita direttamente dalla classe e esegue l'override Control solo di alcuni membri di base. Le proprietà , Visiblee SkinID vengono sottoposte a override e i valori assegnati che impediscono l'usoEnableTheming. Altre proprietà ereditate vengono sottoposte a override per modificare il comportamento in fase di progettazione, ma in caso contrario hanno lo stesso comportamento delle proprietà di base. Queste includono le Controls proprietà e ClientID . Infine, la ProxyWebPartManager classe ha una proprietà non ereditata. La StaticConnections proprietà restituisce la propria raccolta di connessioni statiche (oggetto ProxyWebPartConnectionCollection ).

Come per i metodi, la classe esegue l'override ProxyWebPartManager in modo analogo solo di alcuni metodi, principalmente per limitare l'uso. Il metodo ereditato Focus viene reso inutilizzabile generando un'eccezione se chiamata. Il CreateControlCollection metodo restituisce sempre una raccolta di controlli vuota, che ha l'effetto di impedire che possa contenere una raccolta di controlli. Infine, il OnInit metodo chiama il metodo base e quindi assegna la raccolta di connessioni a cui fa riferimento StaticConnections la WebPartManager.StaticConnections proprietà del WebPartManager controllo. Questo ha l'effetto di eseguire il roll up di tutte le connessioni statiche dichiarate in tutte le pagine del contenuto e di renderle parte della raccolta di connessioni gestite dal WebPartManager controllo nella pagina master.

Costruttori

ProxyWebPartManager()

Inizializza una nuova istanza della classe ProxyWebPartManager.

Proprietà

Adapter

Ottiene l'adattatore specifico del browser per il controllo.

(Ereditato da Control)
AppRelativeTemplateSourceDirectory

Ottiene o imposta la directory virtuale relativa all'applicazione dell'oggetto Page o UserControl contenente questo controllo.

(Ereditato da Control)
BindingContainer

Ottiene il controllo contenente l'associazione dati del controllo corrente.

(Ereditato da Control)
ChildControlsCreated

Ottiene un valore che indica se i controlli figli del controllo server sono stati creati.

(Ereditato da Control)
ClientID

Ottiene l'ID di controllo per il markup HTML generato da ASP.NET.

ClientIDMode

Ottiene o imposta l'algoritmo utilizzato per generare il valore della proprietà ClientID.

(Ereditato da Control)
ClientIDSeparator

Ottiene un carattere che rappresenta il separatore utilizzato nella proprietà ClientID.

(Ereditato da Control)
Context

Ottiene l'oggetto HttpContext associato al controllo server per la richiesta Web corrente.

(Ereditato da Control)
Controls

Ottiene un oggetto ControlCollection che rappresenta i controlli figlio per un controllo server specificato nella gerarchia dell'interfaccia utente.

DataItemContainer

Ottiene un riferimento al contenitore di denominazione se il contenitore di denominazione implementa IDataItemContainer.

(Ereditato da Control)
DataKeysContainer

Ottiene un riferimento al contenitore di denominazione se il contenitore di denominazione implementa IDataKeysControl.

(Ereditato da Control)
DesignMode

Ottiene un valore che indica se un controllo viene utilizzato in un'area di progettazione.

(Ereditato da Control)
EnableTheming

Esegue l'override della proprietà base per impedire l'utilizzo dei temi.

EnableViewState

Ottiene o imposta un valore che indica se lo stato di visualizzazione del controllo server deve essere persistente e lo stato di visualizzazione dei controlli figlio contenuti, per il client richiedente.

(Ereditato da Control)
Events

Ottiene un elenco dei delegati del gestore eventi per il controllo. Questa proprietà è di sola lettura.

(Ereditato da Control)
HasChildViewState

Ottiene un valore che indica se per i controlli figlio del controllo server corrente esistono impostazioni dello stato di visualizzazione salvate.

(Ereditato da Control)
ID

Ottiene o imposta l'identificatore a livello di codice assegnato al controllo server.

(Ereditato da Control)
IdSeparator

Ottiene il carattere utilizzato per separare gli identificatori di controllo.

(Ereditato da Control)
IsChildControlStateCleared

Ottiene un valore che indica se i controlli contenuti in questo controllo dispongono di informazioni sullo stato del controllo.

(Ereditato da Control)
IsTrackingViewState

Ottiene un valore che indica se il controllo server salva le modifiche allo stato di visualizzazione.

(Ereditato da Control)
IsViewStateEnabled

Ottiene un valore che indica se lo stato di visualizzazione è attivato per il controllo corrente.

(Ereditato da Control)
LoadViewStateByID

Ottiene un valore che indica se il controllo prende parte al caricamento del proprio stato di visualizzazione tramite ID anziché tramite l'indice.

(Ereditato da Control)
NamingContainer

Ottiene un riferimento al contenitore dei nomi del controllo server, che crea uno spazio dei nomi univoco per distinguere i controlli server che hanno lo stesso valore della proprietà ID.

(Ereditato da Control)
Page

Ottiene un riferimento all'istanza Page che contiene il controllo server.

(Ereditato da Control)
Parent

Ottiene un riferimento al controllo padre del controllo server nella gerarchia dei controlli della pagina.

(Ereditato da Control)
RenderingCompatibility

Ottiene un valore che specifica la versione di ASP.NET con cui sarà compatibile il codice HTML di cui è stato eseguito il rendering.

(Ereditato da Control)
Site

Ottiene informazioni sul contenitore del controllo corrente quando viene eseguito il rendering in un'area di progettazione.

(Ereditato da Control)
SkinID

Esegue l'override della proprietà base per impedire l'assegnazione di un valore.

StaticConnections

Ottiene un insieme di connessioni statiche dichiarate nell'elemento <asp:proxywebpartmanager> in una pagina di contenuto.

TemplateControl

Ottiene o imposta un riferimento al modello che contiene il controllo.

(Ereditato da Control)
TemplateSourceDirectory

Ottiene la directory virtuale dell'oggetto Page o dell'oggetto UserControl che contiene il controllo server corrente.

(Ereditato da Control)
UniqueID

Ottiene l'identificatore univoco qualificato gerarchicamente per il controllo server.

(Ereditato da Control)
ValidateRequestMode

Ottiene o imposta un valore che indica se il controllo verifica la presenza di valori potenzialmente pericolosi nell'input proveniente dal browser.

(Ereditato da Control)
ViewState

Ottiene un dizionario di informazioni sullo stato che permette di salvare e ripristinare lo stato di visualizzazione di un controllo server attraverso più richieste per la stessa pagina.

(Ereditato da Control)
ViewStateIgnoresCase

Ottiene un valore che indica se l'oggetto StateBag non effettua la distinzione tra maiuscole e minuscole.

(Ereditato da Control)
ViewStateMode

Ottiene o imposta la modalità dello stato, visualizzazione di questo controllo.

(Ereditato da Control)
Visible

Esegue l'override della proprietà base per impedire l'assegnazione di un valore.

Metodi

AddedControl(Control, Int32)

Chiamato dopo che un controllo figlio viene aggiunto alla raccolta Controls dell'oggetto Control.

(Ereditato da Control)
AddParsedSubObject(Object)

Notifica al controllo server che un elemento, XML o HTML, è stato analizzato e aggiunge l'elemento all'oggetto ControlCollection del controllo server.

(Ereditato da Control)
ApplyStyleSheetSkin(Page)

Applica al controllo le proprietà di stile definite nel foglio di stile della pagina.

(Ereditato da Control)
BeginRenderTracing(TextWriter, Object)

Inizia la traccia in fase di progettazione dei dati di rendering.

(Ereditato da Control)
BuildProfileTree(String, Boolean)

Raccoglie informazioni sul controllo server e le recapita alla proprietà Trace in modo che vengano visualizzate quando è attivata la tracciatura per la pagina.

(Ereditato da Control)
ClearCachedClientID()

Imposta il valore memorizzato nella cache ClientID su null.

(Ereditato da Control)
ClearChildControlState()

Elimina le informazioni sullo stato del controllo per i controlli figlio del controllo server.

(Ereditato da Control)
ClearChildState()

Elimina le informazioni sullo stato di visualizzazione e sullo stato del controllo per tutti i controlli figlio del controllo server.

(Ereditato da Control)
ClearChildViewState()

Elimina le informazioni sullo stato di visualizzazione per tutti i controlli figlio del controllo server.

(Ereditato da Control)
ClearEffectiveClientIDMode()

Imposta la proprietà ClientIDMode dell'istanza del controllo corrente e di tutti i controlli figlio su Inherit.

(Ereditato da Control)
CreateChildControls()

Viene chiamato dal framework della pagina ASP.NET per notificare ai controlli server che usano un'implementazione basata sulla composizione di creare gli eventuali controlli figlio in essi contenuti in preparazione per il postback o il rendering.

(Ereditato da Control)
CreateControlCollection()

Esegue l'override della proprietà base per impedire che il controllo ProxyWebPartManager contenga controlli.

DataBind()

Associa un'origine dati al controllo server richiamato e a tutti i controlli figlio.

(Ereditato da Control)
DataBind(Boolean)

Associa un'origine dati al controllo server chiamato e ai relativi controlli figlio con un'opzione per generare l'evento DataBinding.

(Ereditato da Control)
DataBindChildren()

Associa un'origine dati al controllo server e ai relativi controlli figlio.

(Ereditato da Control)
Dispose()

Abilita un controllo server alla pulizia finale prima che venga rilasciato dalla memoria.

(Ereditato da Control)
EndRenderTracing(TextWriter, Object)

Termina la traccia in fase di progettazione dei dati di rendering.

(Ereditato da Control)
EnsureChildControls()

Determina se il controllo server contiene controlli figlio. In caso contrario, li crea.

(Ereditato da Control)
EnsureID()

Crea un identificatore per i controlli a cui non è assegnato alcun identificatore.

(Ereditato da Control)
Equals(Object)

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

(Ereditato da Object)
FindControl(String)

Cerca un controllo server nel contenitore dei nomi corrente con il parametro id specificato.

(Ereditato da Control)
FindControl(String, Int32)

Cerca nel contenitore di denominazione corrente un controllo server con il parametro id indicato e un intero, specificato nel parametro pathOffset, che agevola la ricerca. Non eseguire l'override di questa versione del metodo FindControl.

(Ereditato da Control)
Focus()

Esegue l'override del metodo di base per impedire che il metodo venga chiamato.

GetDesignModeState()

Ottiene i dati della fase di progettazione per un controllo.

(Ereditato da Control)
GetHashCode()

Funge da funzione hash predefinita.

(Ereditato da Object)
GetRouteUrl(Object)

Ottiene l'URL corrispondente a un set di parametri di route.

(Ereditato da Control)
GetRouteUrl(RouteValueDictionary)

Ottiene l'URL corrispondente a un set di parametri di route.

(Ereditato da Control)
GetRouteUrl(String, Object)

Ottiene l'URL che corrisponde a un set di parametri di route e a un nome della route.

(Ereditato da Control)
GetRouteUrl(String, RouteValueDictionary)

Ottiene l'URL che corrisponde a un set di parametri di route e a un nome della route.

(Ereditato da Control)
GetType()

Ottiene l'oggetto Type dell'istanza corrente.

(Ereditato da Object)
GetUniqueIDRelativeTo(Control)

Restituisce la parte con prefisso della proprietà UniqueID del controllo specificato.

(Ereditato da Control)
HasControls()

Determina se il controllo server contiene controlli figlio.

(Ereditato da Control)
HasEvents()

Restituisce un valore che indica se gli eventi vengono registrati per il controllo o eventuali controlli figlio.

(Ereditato da Control)
IsLiteralContent()

Determina se il controllo server conserva solo il contenuto literal.

(Ereditato da Control)
LoadControlState(Object)

Ripristina le informazioni sullo stato del controllo da una richiesta di pagina precedente salvata dal metodo SaveControlState().

(Ereditato da Control)
LoadViewState(Object)

Ripristina le informazioni sullo stato di visualizzazione da una richiesta di pagina precedente salvata dal metodo SaveViewState().

(Ereditato da Control)
MapPathSecure(String)

Recupera il percorso fisico al quale è associato un percorso virtuale, assoluto o relativo.

(Ereditato da Control)
MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.

(Ereditato da Object)
OnBubbleEvent(Object, EventArgs)

Determina se l'evento per il controllo server viene passato a un livello superiore nella gerarchia dei controlli server dell'interfaccia utente per la pagina.

(Ereditato da Control)
OnDataBinding(EventArgs)

Genera l'evento DataBinding.

(Ereditato da Control)
OnInit(EventArgs)

Genera l'evento Init e inizializza il controllo.

OnLoad(EventArgs)

Genera l'evento Load.

(Ereditato da Control)
OnPreRender(EventArgs)

Genera l'evento PreRender.

(Ereditato da Control)
OnUnload(EventArgs)

Genera l'evento Unload.

(Ereditato da Control)
OpenFile(String)

Ottiene un oggetto Stream utilizzato per leggere un file.

(Ereditato da Control)
RaiseBubbleEvent(Object, EventArgs)

Assegna eventuali origini dell'evento e relative informazioni al controllo padre.

(Ereditato da Control)
RemovedControl(Control)

Chiamato dopo che un controllo figlio viene rimosso dalla raccolta Controls dell'oggetto Control.

(Ereditato da Control)
Render(HtmlTextWriter)

Invia il contenuto del controllo server a un oggetto HtmlTextWriter specificato che scrive il contenuto di cui eseguire il rendering nel client.

(Ereditato da Control)
RenderChildren(HtmlTextWriter)

Restituisce il contenuto degli elementi figlio di un controllo server a un oggetto HtmlTextWriter specificato, che scrive il contenuto di cui eseguire il rendering nel client.

(Ereditato da Control)
RenderControl(HtmlTextWriter)

Restituisce il contenuto del controllo server a un oggetto HtmlTextWriter specificato e archivia le informazioni di traccia relative al controllo se la funzionalità di traccia è abilitata.

(Ereditato da Control)
RenderControl(HtmlTextWriter, ControlAdapter)

Restituisce il contenuto del controllo server a un oggetto HtmlTextWriter specificato utilizzando un oggetto ControlAdapter specificato.

(Ereditato da Control)
ResolveAdapter()

Ottiene l'adattatore del controllo responsabile del rendering del controllo specificato.

(Ereditato da Control)
ResolveClientUrl(String)

Ottiene un URL che può essere utilizzato dal browser.

(Ereditato da Control)
ResolveUrl(String)

Converte un URL in un formato utilizzabile dal client richiedente.

(Ereditato da Control)
SaveControlState()

Salva tutte le modifiche dello stato di un controllo server apportate dopo il postback della pagina nel server.

(Ereditato da Control)
SaveViewState()

Salva eventuali modifiche dello stato di visualizzazione di un controllo server apportate dopo il postback della pagina nel server.

(Ereditato da Control)
SetDesignModeState(IDictionary)

Imposta i dati della fase di progettazione per un controllo.

(Ereditato da Control)
SetRenderMethodDelegate(RenderMethod)

Assegna un delegato del gestore eventi per eseguire il rendering del controllo server e del relativo contenuto nel controllo padre.

(Ereditato da Control)
SetTraceData(Object, Object)

Imposta i dati di traccia per la traccia durante la fase di progettazione dei dati di rendering, utilizzando la chiave dei dati di traccia e il valore dei dati di traccia.

(Ereditato da Control)
SetTraceData(Object, Object, Object)

Imposta i dati di traccia per la traccia durante la fase di progettazione dei dati di rendering, utilizzando l'oggetto tracciato, la chiave dei dati di traccia e il valore dei dati di traccia.

(Ereditato da Control)
ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)
TrackViewState()

Attiva il rilevamento delle modifiche dello stato di visualizzazione nel controllo server per consentirne la memorizzazione nell'oggetto StateBag del controllo server. È possibile accedere a questo oggetto tramite la proprietà ViewState.

(Ereditato da Control)

Eventi

DataBinding

Viene generato quando il controllo server viene associato a un'origine dati.

(Ereditato da Control)
Disposed

Si verifica quando un controllo server viene rilasciato dalla memoria, ossia nell'ultima fase della durata di un controllo server quando viene richiesta una pagina ASP.NET.

(Ereditato da Control)
Init

Viene generato quando il controllo server viene inizializzato, ovvero nella prima fase della sua durata.

(Ereditato da Control)
Load

Viene generato quando il controllo server è caricato nell'oggetto Page.

(Ereditato da Control)
PreRender

Si verifica dopo il caricamento dell'oggetto Control ma prima del rendering.

(Ereditato da Control)
Unload

Viene generato quando il controllo server viene scaricato dalla memoria.

(Ereditato da Control)

Implementazioni dell'interfaccia esplicita

IControlBuilderAccessor.ControlBuilder

Per una descrizione di questo membro, vedere ControlBuilder.

(Ereditato da Control)
IControlDesignerAccessor.GetDesignModeState()

Per una descrizione di questo membro, vedere GetDesignModeState().

(Ereditato da Control)
IControlDesignerAccessor.SetDesignModeState(IDictionary)

Per una descrizione di questo membro, vedere SetDesignModeState(IDictionary).

(Ereditato da Control)
IControlDesignerAccessor.SetOwnerControl(Control)

Per una descrizione di questo membro, vedere SetOwnerControl(Control).

(Ereditato da Control)
IControlDesignerAccessor.UserData

Per una descrizione di questo membro, vedere UserData.

(Ereditato da Control)
IDataBindingsAccessor.DataBindings

Per una descrizione di questo membro, vedere DataBindings.

(Ereditato da Control)
IDataBindingsAccessor.HasDataBindings

Per una descrizione di questo membro, vedere HasDataBindings.

(Ereditato da Control)
IExpressionsAccessor.Expressions

Per una descrizione di questo membro, vedere Expressions.

(Ereditato da Control)
IExpressionsAccessor.HasExpressions

Per una descrizione di questo membro, vedere HasExpressions.

(Ereditato da Control)
IParserAccessor.AddParsedSubObject(Object)

Per una descrizione di questo membro, vedere AddParsedSubObject(Object).

(Ereditato da Control)

Metodi di estensione

FindDataSourceControl(Control)

Restituisce l'origine dati associata al controllo dati per il controllo specificato.

FindFieldTemplate(Control, String)

Restituisce il modello di campo per la colonna specificata nel contenitore di denominazione del controllo specificato.

FindMetaTable(Control)

Restituisce l'oggetto metatabella per il controllo contenitore dei dati.

Si applica a

Vedi anche