Exportar (0) Imprimir
Expandir todo
Este tema aún no ha recibido ninguna valoración - Valorar este tema

DeclarativeCatalogPart (Clase)

Permite a los desarrolladores agregar un catálogo de elementos WebPart u otros controles de servidor a una página Web en el formato declarativo de persistencia de página. Esta clase no se puede heredar.

Espacio de nombres: System.Web.UI.WebControls.WebParts
Ensamblado: System.Web (en system.web.dll)

public sealed class DeclarativeCatalogPart : CatalogPart
public final class DeclarativeCatalogPart extends CatalogPart
public final class DeclarativeCatalogPart extends CatalogPart
No aplicable.

Así como hay zonas orientadas a herramientas en el conjunto de controles de elementos Web (para obtener detalles, vea la información general de la clase ToolZone), hay controles de elementos Part orientados a herramientas y cada uno de ellos debe residir en un tipo determinado de la zona de herramientas. Los elementos orientados a herramientas de un conjunto de controles de elementos Web tienen dos características distintivas:

  • Son controles auxiliares que permiten a los usuarios finales personalizar controles en una página de elementos Web.

  • Sólo son visibles en algunos modos de presentación.

DeclarativeCatalogPart es un control de elementos que debe residir en un tipo CatalogZoneBase de zona, como la zona CatalogZone proporcionada con el conjunto de controles de elementos Web establecido. El control DeclarativeCatalogPart sólo se vuelve visible cuando las páginas Web están en modo de presentación del catálogo.

El control DeclarativeCatalogPart proporciona a los desarrolladores una manera de agregar declarativamente un conjunto de controles de servidor a un catálogo en una página Web. Un catálogo, en el conjunto de controles de elementos Web, es simplemente una lista de controles WebPart u otros controles de servidor que están visibles cuando las páginas se encuentran en modo de presentación del catálogo. Los usuarios pueden seleccionar los controles en la lista y agregarlos a la página Web, lo que les permite cambiar eficazmente el conjunto de controles y la funcionalidad de las páginas.

NotaNota:

Los usuarios pueden agregar a las páginas Web varias instancias del mismo control contenido en un catálogo.

Una ventaja de utilizar un control DeclarativeCatalogPart para crear un catálogo de controles de servidor es que no es necesario escribir código. Los desarrolladores de páginas pueden trabajar con el control en formato totalmente declarativo (o de persistencia de página) y de ahí proviene el nombre del control.

El control DeclarativeCatalogPart tiene una propiedad útil que permite a los desarrolladores configurar un catálogo de controles que se pueden utilizar en un sitio entero. En lugar de declarar los controles de servidor individuales de un control DeclarativeCatalogPart, los desarrolladores pueden establecer el valor de la propiedad WebPartsListUserControlPath en la ruta de acceso de un control de usuario que contenga la lista de controles de servidor que debería estar en el catálogo. En tiempo de ejecución, se cargan los controles de servidor a los que se hace referencia en el control del usuario en el catálogo. De esta manera, varias páginas o sitios podrían hacer referencia al mismo control de usuario para crear un catálogo. Cuando se actualiza la lista de controles de servidor de la lista del control de usuario, se actualizan todos los catálogos basados en dicho control de usuario.

La clase DeclarativeCatalogPart tiene varias propiedades públicas que reemplazan las propiedades heredadas. La mayoría de estas propiedades no se utiliza realmente para representar el control; sólo se reemplazan para poder establecer en ellas los atributos de código especiales y ocultarlos de las herramientas de diseño como Microsoft Visual Studio 2005. Estas propiedades ocultas no se deben utilizar, ya que no afectan a la representación de los controles. El hecho de que queden ocultas de IntelliSense y del panel Propiedades de Visual Studio ayuda a los desarrolladores a evitar utilizarlas por equivocación. Todas estas propiedades ocultas se indican como tales en sus respectivos temas de la Ayuda.

La clase DeclarativeCatalogPart también contiene varios métodos. El método GetAvailableWebPartDescriptions recupera un objeto WebPartDescription de cada control WebPart del catálogo, que habilita un control DeclarativeCatalogPart para mostrar información sobre cada control de servidor sin necesidad de crear ninguna instancia del mismo. Otro método es el método GetWebPart. Este método obtiene una instancia de un control WebPart determinado, basándose en la descripción pasada al método.

NotaNota:

Para mejorar la accesibilidad, el control DeclarativeCatalogPart se representa en un elemento <fieldset>. El elemento <fieldset> agrupa el conjunto de controles relacionados utilizado para la edición en el control DeclarativeCatalogPart y facilita la exploración mediante tabulación entre dichos controles tanto para los agentes de usuario visuales (por ejemplo, los exploradores Web habituales) como para los agentes de usuario orientados a la voz (por ejemplo, el software de lectura de pantalla).

El ejemplo de código siguiente muestra cómo utilizar el control DeclarativeCatalogPart mediante declaración en una página Web. Este ejemplo tiene cuatro partes:

  • Un control de usuario que permite cambiar los modos de presentación en una página de elementos Web.

  • Una página Web que contiene un control CatalogZone y un control DeclarativeCatalogPart.

  • Un archivo de código fuente que contiene dos controles WebPart personalizados.

  • Una explicación de cómo funciona el ejemplo cuando se carga la página en un explorador.

La primera parte de este ejemplo de código es un control de usuario que permite cambiar los modos de presentación de la página. Para obtener más información sobre los modos de presentación y una descripción del código fuente de este control, vea Tutorial: Cambiar los modos de presentación en una página de elementos Web.

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

La segunda parte del ejemplo de código es la página Web. En la parte superior de la página hay dos directivas Register, una para el control de usuario y otra para el componente compilado que contiene los dos controles WebPart personalizados. Observe que la página tiene una referencia declarativa al control DeclarativeCatalogPart, anidada dentro de la propia jerarquía de elementos declarativos, tal como se describe en la sección Comentarios de este tema. El elemento <asp:declarativecatalogpart> contiene un elemento <webpartstemplate> que, a su vez, contiene las referencias de un control Calendar estándar ASP.NET y los dos controles WebPart personalizados; éstos son los controles que pueden seleccionar los usuarios en el catálogo. La página también contiene funciones de edición, con un control PropertyGridEditorPart declarado en ella. Este control permite a los usuarios editar algunas propiedades en los controles WebPart personalizados una vez agregados a la página y después de que el usuario haya cambiado la página al modo de edición.

<%@ page language="c#" %>
<%@ register TagPrefix="uc1" 
  TagName="DisplayModeMenuCS" 
  Src="DisplayModeMenuCS.ascx" %>
<%@ register tagprefix="aspSample" 
  Namespace="Samples.AspNet.CS.Controls" 
  Assembly="UserInfoWebPartCS" %>

<!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 id="Head1" runat="server">
    <title>
      DeclarativeCatalogPart Control
    </title>
  </head>
  <body>
    <form id="form1" runat="server">
      <asp:webpartmanager id="WebPartManager1" runat="server"  />
      <uc1:DisplayModeMenuCS ID="DisplayModeMenu1" runat="server" />
      <asp:webpartzone id="zone1" runat="server" >
        <PartTitleStyle BorderWidth="1" 
          Font-Names="Verdana, Arial"
          Font-Size="110%"
          BackColor="LightBlue" />
        <zonetemplate>
          <asp:BulletedList ID="BulletedList1" 
            Runat="server"
            DisplayMode="HyperLink"
            Title="Favorites">
            <asp:ListItem Value="http://msdn.microsoft.com">
              MSDN
            </asp:ListItem>
            <asp:ListItem Value="http://www.asp.net">
              ASP.NET
            </asp:ListItem>
            <asp:ListItem Value="http://www.msn.com">
              MSN
            </asp:ListItem>
          </asp:BulletedList>
        </zonetemplate>
      </asp:webpartzone> 
      <asp:CatalogZone ID="CatalogZone1" runat="server">
        <ZoneTemplate>
          <asp:DeclarativeCatalogPart ID="DeclarativeCatalogPart1"  
            runat="server" 
            Title="Web Parts Catalog"
            ChromeType="TitleOnly" 
            Description="Contains a user control with Web Parts and 
              an ASP.NET Calendar control.">
            <WebPartsTemplate>
              <asp:Calendar ID="Calendar1" runat="server" 
                Title="My Calendar" 
                Description="ASP.NET Calendar control used as a personal calendar." />
              <aspSample:UserInfoWebPart 
                runat="server"   
                id="userinfo1" 
                title = "User Information WebPart"
                Description ="Contains custom, editable user information 
                  for display on a page." />
              <aspSample:TextDisplayWebPart 
                runat="server"   
                id="TextDisplayWebPart1" 
                title = "Text Display WebPart" 
                Description="Contains a label that users can dynamically update." />
            </WebPartsTemplate>              
          </asp:DeclarativeCatalogPart>
        </ZoneTemplate>
      </asp:CatalogZone>
      <asp:EditorZone ID="EditorZone1" runat="server">
      <ZoneTemplate>
        <asp:PropertyGridEditorPart ID="PropertyGridEditorPart1" runat="server" />
      </ZoneTemplate>
      </asp:EditorZone> 
    </form>
  </body>
</html>

La tercera parte del ejemplo de código es el código fuente de los dos controles.WebPart. Observe que algunas propiedades de estos controles están marcadas con el atributo WebBrowsable. De esta forma, el control PropertyGridEditorPart puede generar dinámicamente la interfaz de usuario para que los usuarios puedan editar dichas propiedades cuando los controles estén en modo de edición. Las propiedades también están marcadas con un atributo WebDisplayName, para especificar el texto de la etiqueta que aparece al lado de cada control en la interfaz de usuario de edición.

Para que el ejemplo de código funcione, es necesario compilar este código fuente. Se puede compilar de manera explícita y colocar el ensamblado resultante en la carpeta Bin del sitio Web o en la caché de ensamblados global. Como alternativa, el código fuente se puede colocar en la carpeta App_Code del sitio Web, donde se compilará dinámicamente en tiempo de ejecución. Para ver una demostración de ambos métodos de compilación, vea Tutorial: Desarrollar y utilizar un control de servidor personalizado.

using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Security.Permissions;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;

namespace Samples.AspNet.CS.Controls
{
  [AspNetHostingPermission(SecurityAction.Demand,
    Level = AspNetHostingPermissionLevel.Minimal)]
  [AspNetHostingPermission(SecurityAction.InheritanceDemand,
    Level = AspNetHostingPermissionLevel.Minimal)]
  public class UserInfoWebPart : WebPart
  {
    HttpServerUtility server = HttpContext.Current.Server;
    private String _userNickName = "Add a nickname.";
    private String _userPetName = "Add a pet's name.";
    private DateTime _userSpecialDate = DateTime.Now;
    private Boolean _userIsCurrent = true;
    private JobTypeName _userJobType = JobTypeName.Unselected;
    public enum JobTypeName
    {
      Unselected = 0,
      Support = 1,
      Service = 2,
      Professional = 3, 
      Technical = 4,
      Manager = 5,
      Executive = 6
    }
    Label NickNameLabel;
    Label PetNameLabel;
    Label SpecialDateLabel;
    CheckBox IsCurrentCheckBox;
    Label JobTypeLabel;

    // Add the Personalizable and WebBrowsable attributes to the  
    // public properties, so that users can save property values  
    // and edit them with a PropertyGridEditorPart control.
    [Personalizable(), WebBrowsable, WebDisplayName("Nickname")]
    public String NickName
    {
      get 
      { 
        object o = ViewState["NickName"];
        if (o != null)
          return (string)o;
        else
          return _userNickName;        
      } 

      set { _userNickName = server.HtmlEncode(value); }
    }

    [Personalizable(), WebBrowsable, WebDisplayName("Pet Name")]
    public String PetName
    {
      get 
      { 
        object o = ViewState["PetName"];
        if (o != null)
          return (string)o;
        else
          return _userPetName;        
      }

      set { _userPetName = server.HtmlEncode(value); }
    }

    [Personalizable(), WebBrowsable(), WebDisplayName("Special Day")]
    public DateTime SpecialDay
    {
      get
      {
        object o = ViewState["SpecialDay"];
        if (o != null)
          return (DateTime)o;
        else
          return _userSpecialDate;
        
      }

      set { _userSpecialDate = value; }
    }

    [Personalizable(), WebBrowsable(), WebDisplayName("Job Type")]
    public JobTypeName UserJobType
    {
      get
      {
        object o = ViewState["UserJobType"];
        if (o != null)
          return (JobTypeName)o;
        else
          return _userJobType;
      }

      set { _userJobType = (JobTypeName)value; }
    }

    [Personalizable(), WebBrowsable(), WebDisplayName("Is Current")]
    public Boolean IsCurrent
    {
      get
      {
        object o = ViewState["IsCurrent"];
        if (o != null)
          return (Boolean)o;
        else
          return _userIsCurrent;
      }

      set { _userIsCurrent = value; }
    }


    protected override void CreateChildControls()
    {
      Controls.Clear();

      NickNameLabel = new Label();
      NickNameLabel.Text = this.NickName;
      SetControlAttributes(NickNameLabel);

      PetNameLabel = new Label();
      PetNameLabel.Text = this.PetName;
      SetControlAttributes(PetNameLabel);

      SpecialDateLabel = new Label();
      SpecialDateLabel.Text = this.SpecialDay.ToShortDateString();
      SetControlAttributes(SpecialDateLabel);

      IsCurrentCheckBox = new CheckBox();
      IsCurrentCheckBox.Checked = this.IsCurrent;
      SetControlAttributes(IsCurrentCheckBox);

      JobTypeLabel = new Label();
      JobTypeLabel.Text = this.UserJobType.ToString();
      SetControlAttributes(JobTypeLabel);

      ChildControlsCreated = true;

    }

    private void SetControlAttributes(WebControl ctl)
    {
      ctl.BackColor = Color.White;
      ctl.BorderWidth = 1;
      ctl.Width = 200;
      this.Controls.Add(ctl);
    }

    protected override void RenderContents(HtmlTextWriter writer)
    {
      writer.Write("Nickname:");
      writer.WriteBreak();
      NickNameLabel.RenderControl(writer);
      writer.WriteBreak();
      writer.Write("Pet Name:");
      writer.WriteBreak();
      PetNameLabel.RenderControl(writer);
      writer.WriteBreak();
      writer.Write("Special Date:");
      writer.WriteBreak();
      SpecialDateLabel.RenderControl(writer);
      writer.WriteBreak();
      writer.Write("Job Type:");
      writer.WriteBreak();
      JobTypeLabel.RenderControl(writer);
      writer.WriteBreak();
      writer.Write("Current:");
      writer.WriteBreak();
      IsCurrentCheckBox.RenderControl(writer);
    }
  }


  [AspNetHostingPermission(SecurityAction.Demand,
    Level = AspNetHostingPermissionLevel.Minimal)]
  [AspNetHostingPermission(SecurityAction.InheritanceDemand,
    Level = AspNetHostingPermissionLevel.Minimal)]
  public class TextDisplayWebPart : WebPart
  {
    private String _contentText = null;
    TextBox input;
    Label DisplayContent;
    Literal lineBreak;

    [Personalizable(), WebBrowsable]
    public String ContentText
    {
      get { return _contentText; }
      set { _contentText = value; }
    }

    protected override void CreateChildControls()
    {
      Controls.Clear();
      DisplayContent = new Label();
      DisplayContent.BackColor = Color.LightBlue;
      DisplayContent.Text = this.ContentText;
      this.Controls.Add(DisplayContent);

      lineBreak = new Literal();
      lineBreak.Text = @"<br />";
      Controls.Add(lineBreak);

      input = new TextBox();
      this.Controls.Add(input);
      Button update = new Button();
      update.Text = "Set Label Content";
      update.Click += new EventHandler(this.submit_Click);
      this.Controls.Add(update);

    }

    private void submit_Click(object sender, EventArgs e)
    {
      // Update the label string.
      if (input.Text != String.Empty)
      {
        _contentText = input.Text + @"<br />";
        input.Text = String.Empty;
        DisplayContent.Text = this.ContentText;
      }
    }

  }

}

Cuando cargue la página en un explorador, seleccione Modo de catálogo en el control de lista desplegable Modo de presentación para pasar al modo de catálogo. En el modo de catálogo, es posible ver los controles que se pueden agregar a la página. Agregue los tres controles y, a continuación, utilice la lista desplegable Modo de presentación para volver a poner la página en el modo de exploración. En la página aparecen los tres controles. Si utiliza la lista desplegable Modo de presentación y cambia la página al modo de edición, puede hacer clic en el menú de verbos (la flecha descendente) de la barra de título del control Elemento Web de información de usuario y hacer clic después en Editar para editar el control. Cuando aparezca la interfaz de usuario de edición, podrá ver el control PropertyGridEditorPart. Observe que se representa un control para cada una de las propiedades de la clase UserInfoWebPart marcada con el atributo WebBrowsable. Si realiza algunos cambios en la interfaz de usuario de edición y hace clic en el botón Aplicar, puede utilizar la lista desplegable Modo de presentación para devolver la página al modo de exploración y ver el efecto completo de los cambios de edición.

System.Object
   System.Web.UI.Control
     System.Web.UI.WebControls.WebControl
       System.Web.UI.WebControls.Panel
         System.Web.UI.WebControls.WebParts.Part
           System.Web.UI.WebControls.WebParts.CatalogPart
            System.Web.UI.WebControls.WebParts.DeclarativeCatalogPart
Los miembros estáticos públicos (Shared en Visual Basic) de este tipo son seguros para la ejecución de subprocesos. No se garantiza que los miembros de instancias sean seguros para la ejecución de subprocesos.

Windows 98, Windows 2000 Service Pack 4, Windows CE, Windows Millennium, Windows Mobile para Pocket PC, Windows Mobile para Smartphone, Windows Server 2003, Windows XP Media Center, Windows XP Professional x64, Windows XP SP2, Windows XP Starter

Microsoft .NET Framework 3.0 es compatible con Windows Vista, Microsoft Windows XP SP2 y Windows Server 2003 SP1.

.NET Framework

Compatible con: 3.0, 2.0
¿Te ha resultado útil?
(Caracteres restantes: 1500)
Gracias por sus comentarios
Mostrar:
© 2014 Microsoft. Reservados todos los derechos.