WebPartPersonalization (Clase)
Ensamblado: System.Web (en system.web.dll)
[TypeConverterAttribute(typeof(EmptyStringExpandableObjectConverter))] public class WebPartPersonalization
/** @attribute TypeConverterAttribute(System.Web.UI.WebControls.EmptyStringExpandableObjectConverter) */ public class WebPartPersonalization
TypeConverterAttribute(System.Web.UI.WebControls.EmptyStringExpandableObjectConverter) public class WebPartPersonalization
No aplicable.
Esta clase implementa la lógica necesaria para llevar a cabo operaciones de personalización de bajo nivel. Aunque la clase WebPartManager administra el ciclo de vida de personalización de alto nivel, es la clase WebPartPersonalization la responsable de implementar realmente los pasos físicos necesarios para llevar a cabo acciones de personalización concretas. La clase WebPartPersonalization, a su vez, se apoya en una implementación de PersonalizationProvider para comunicarse con el almacén de datos subyacente para obtener información de personalización.
Si se utiliza la implementación predeterminada de WebPartManager, crea una instancia de la clase WebPartPersonalization que se puede utilizar haciendo referencia a la propiedad Personalization. Por ejemplo, para tener acceso a la propiedad InitialScope, especificaría WebPartManager.Personalization.InitialScope.
Notas para los herederos: La clase WebPartPersonalization coopera estrechamente con un control WebPartManager y con el resto de la infraestructura de personalización. La implementación de personalización predeterminada es un subsistema muy sólido que debe satisfacer las necesidades de personalización. En la mayoría de los casos, si desea personalizar la personalización, puede crear un proveedor de datos para utilizarlo como proveedor de personalización, creando una clase que herede de PersonalizationProvider. Si desea crear un subsistema de personalización significativamente diferente del proporcionado por las clases WebPartPersonalization y WebPartManager, debe crear una implementación personalizada de WebPartPersonalization derivando de WebPartPersonalization y agregar lógica personalizada propia. A continuación, cree una implementación personalizada de WebPartManager derivando de WebPartManager, agregue su propia lógica personalizada y reemplace el método CreatePersonalization para devolver la implementación personalizada de WebPartPersonalization. Dado que un control WebPartManager hace peticiones a la infraestructura de personalización mediante una instancia de WebPartPersonalization, el control WebPartManager no interactúa directamente ni contiene referencias a las implementaciones de PersonalizationProvider.| Tema | Ubicación |
|---|---|
| Cómo: Deshabilitar la personalización de elementos Web | Generar aplicaciones Web ASP .NET |
| Cómo: Habilitar la personalización compartida de páginas de elementos Web ASP.NET | Generar aplicaciones Web ASP .NET |
| Cómo: Habilitar la personalización compartida de páginas de elementos Web | Generar aplicaciones Web ASP .NET en Visual Studio |
| Cómo: Deshabilitar la personalización de elementos Web | Generar aplicaciones Web ASP .NET en Visual Studio |
El ejemplo de código siguiente muestra cómo se utiliza la clase WebPartPersonalization, y proporciona un ejemplo de cómo afecta el ámbito de personalización a los resultados de las propiedades personalizadas. Este ejemplo tiene cinco archivos:
-
Una página .aspx que crea mediante declaración dos zonas de elementos Web, cada una con un control.
-
Un control de usuario llamado Color.ascx que permite al usuario cambiar una propiedad personalizada que aplica un color de fondo de cuadro de texto en función de los derechos de autorización del usuario, para modificar información de estado y entrar en el ámbito compartido.
-
Un control de usuario llamado Persmode.ascx que indica cuál es el ámbito de la página actual y qué derechos tiene el usuario actual para entrar en el ámbito compartido o modificar los datos; también proporciona dos botones: uno para cambiar de ámbito y otro para restablecer la información de personalización del usuario actual.
-
Un control de inicio de sesión que se utiliza para autorizar a los usuarios.
-
Un archivo Web.config con una sección que proporciona un ejemplo de autorización de un usuario para modificar el estado de personalización y entrar en el ámbito compartido.
El código siguiente crea una página aspx con un objeto WebPartManager y dos zonas de elementos Web y muestra los controles Color.ascx y Persmode.ascx. La página carga una página de inicio de sesión que se utiliza para obtener la información del usuario actual. Utilice la herramienta Administración de sitios Web de ASP.NET en Microsoft Visual Studio 2005 para crear usuarios que tengan acceso a la página. Vea el archivo Web.config para obtener un ejemplo de un usuario al que se ha concedido autorización, en el archivo de configuración, para cambiar el ámbito y modificar la información de estado.
<%@ Page Language="C#" %> <%@ Register TagPrefix="control" TagName="colorcontrol" Src="~/color.ascx"%> <%@Register TagPrefix="pmode" TagName="persmode" Src="~/persMode.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>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <!-- Create Web Part manager and zone for the color user control. --> <asp:WebPartManager ID="WebPartManager1" runat="server"></asp:WebPartManager> <asp:WebPartZone ID="WebPartZone1" runat="server" HeaderText="Color Change Zone"> <ZoneTemplate> <!-- Note that the control is Shared since it is declared on the page. --> <control:colorcontrol id="color1" title="Color Control" runat="server" /> </ZoneTemplate> </asp:WebPartZone> <br /> <!-- Create Web Part zone for the personalization mode user control. --> <asp:WebPartZone ID="WebPartZone2" runat="server" HeaderText="Scope Change Zone" Height="109px"> <ZoneTemplate> <pmode:persmode ID="Persmode1" runat="server" title="Scope Tool"/> </ZoneTemplate> </asp:WebPartZone> </form> </body> </html>
En el ejemplo de código siguiente se crea una página de inicio de sesión. Después de un inicio de sesión correcto, redirige a la página aspx principal.
Nota: de seguridad |
|---|
| Este ejemplo tiene un cuadro de texto que acepta datos del usuario, lo que puede suponer una amenaza para la seguridad. De forma predeterminada, las páginas Web ASP.NET validan que los datos proporcionados por el usuario no incluyen elementos HTML ni de secuencia de comandos. Para obtener más información, vea Información general sobre los ataques mediante secuencias de comandos. |
<%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> </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:Login ID="Login1" runat="server" BorderWidth="1px" BorderColor="#E6E2D8" BorderPadding="4" BorderStyle="Solid" BackColor="#F7F6F3" ForeColor="#333333" Font-Names="Verdana" Font-Size="0.8em" DestinationPageUrl="~/Defaultcs.aspx"> <InstructionTextStyle ForeColor="Black" Font-Italic="True" Font-Size="0.8em" /> <LoginButtonStyle Font-Names="Verdana" Font-Size="0.8em" BorderStyle="Solid" BorderWidth="1px" BorderColor="#CCCCCC" BackColor="#FFFBFF" ForeColor="#284775" /> <TextBoxStyle Font-Size="0.8em" /> <LabelStyle Font-Size="0.8em" /> <TitleTextStyle ForeColor="White" Font-Size="0.9em" Font-Bold="True" BackColor="#5D7B9D" /> <HyperLinkStyle Font-Size="0.8em" /> <CheckBoxStyle Font-Size="0.8em" /> <FailureTextStyle ForeColor="#FF0000" Font-Size="0.8em" /> </asp:Login> You can create new users with the ASP.NET Web Site Administration Tool in Microsoft Visual Studio 2005. See also the web.config file for user authorization examples. </div> </form> </body> </html>
El ejemplo de código siguiente es una parte del archivo Web.config para esta aplicación. En esta sección se muestra cómo establecer la autorización para un usuario, en este caso "user2", para que entre en el ámbito de personalización compartido y modifique información de estado de personalización. También muestra un ejemplo de una función, en este caso "admin", que se puede utilizar para permitir que los usuarios de la función "admin" entren en el ámbito de personalización compartido y modifiquen información de estado de personalización.
<webParts>
<personalization defaultProvider="AspNetSqlPersonalizationProvider">
<authorization>
<allow users="user2" verbs="enterSharedScope, modifyState"/>
<allow roles="admin" verbs="enterSharedScope, modifyState"/>
</authorization>
</personalization>
</webParts>
El ejemplo de código siguiente crea un control de usuario, llamado Color.ascx, que permite al usuario cambiar una propiedad personalizada, en este caso el color de fondo de dos cuadros de texto, en función del ámbito de personalización actual y los derechos de autorización del usuario.
Nota: de seguridad |
|---|
| Este ejemplo tiene un cuadro de texto que acepta datos del usuario, lo que puede suponer una amenaza para la seguridad. De forma predeterminada, las páginas Web ASP.NET validan que los datos proporcionados por el usuario no incluyen elementos HTML ni de secuencia de comandos. Para obtener más información, vea Información general sobre los ataques mediante secuencias de comandos. |
<%@ Control Language="C#" %> <script runat="server"> // User a field to reference the current WebPartManager. private WebPartManager _manager; // Defines personalized property for User scope. In this case, the property is // the background color of the text box. [Personalizable(PersonalizationScope.User)] public System.Drawing.Color UserColorChoice { get { return _coloruserTextBox.BackColor; } set { _coloruserTextBox.BackColor = value; } } // Defines personalized property for Shared scope. In this case, the property is // the background color of the text box. [Personalizable(PersonalizationScope.Shared) ] public System.Drawing.Color SharedColorChoice { get { return _colorsharedTextBox.BackColor; } set { _colorsharedTextBox.BackColor = value; } } void Page_Init(object sender, EventArgs e) { _manager = WebPartManager.GetCurrentWebPartManager(Page); } protected void Page_Load(object src, EventArgs e) { // If Web Parts manager scope is User, hide the button that changes shared control. if (_manager.Personalization.Scope == PersonalizationScope.User) { _sharedchangeButton.Visible = false; if (!_manager.Personalization.IsModifiable) _userchangeButton.Enabled = false; } else { _sharedchangeButton.Visible = true; if (!_manager.Personalization.IsModifiable) { _sharedchangeButton.Enabled = false; _userchangeButton.Enabled = false; } } } // Changes color of the User text box background when button clicked by authorized user. protected void _userButton_Click(object src, EventArgs e) { switch(_coloruserTextBox.BackColor.Name) { case "Red": _coloruserTextBox.BackColor = System.Drawing.Color.Yellow; break; case "Yellow": _coloruserTextBox.BackColor = System.Drawing.Color.Green; break; case "Green": _coloruserTextBox.BackColor = System.Drawing.Color.Red; break; } } // Changes color of the Shared text box background when button clicked by authorized user. protected void _sharedButton_Click(object src, EventArgs e) { switch (_colorsharedTextBox.BackColor.Name) { case "Red": _colorsharedTextBox.BackColor = System.Drawing.Color.Yellow; break; case "Yellow": _colorsharedTextBox.BackColor = System.Drawing.Color.Green; break; case "Green": _colorsharedTextBox.BackColor = System.Drawing.Color.Red; break; } } </script> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>WebParts Personalization Example</title> </head> <body> <p> <asp:LoginName ID="LoginName1" runat="server" BorderWidth="500" BorderStyle="none" /> <asp:LoginStatus ID="LoginStatus1" LogoutAction="RedirectToLoginPage" runat="server" /> </p> <asp:Label ID="ScopeLabel" Text="Scoped Properties:" runat="server" Width="289px"></asp:Label> <br /> <table style="width: 226px"> <tr> <td> <asp:TextBox ID="_coloruserTextBox" Font-Bold="True" Height="110px" runat="server" Text="User Property" BackColor="red" Width="110px" /> </td> <td> <asp:TextBox ID="_colorsharedTextBox" runat="server" Height="110px" Width="110px" Text="Shared Property" BackColor="red" Font-Bold="true" /> </td> </tr> <tr> <td> <asp:Button Text="Change User Color" ID="_userchangeButton" runat="server" OnClick="_userButton_Click" /> </td> <td > <asp:Button Text="Change Shared Color" ID="_sharedchangeButton" runat="server" OnClick="_sharedButton_Click" /> </td> </tr> </table> </body> </html>
El ejemplo de código siguiente crea un control de usuario, llamado Persmode.ascx, que muestra el ámbito de personalización actual y los derechos de usuario para modificar el estado y entrar en el ámbito compartido. También tiene un botón de reinicialización para restablecer el estado de personalización actual.
<%@ control language="C#" %> <script runat="server"> // Use a field to reference the current WebPartManager. private WebPartManager _manager; protected void Page_Load(object src, EventArgs e) { // Get the current Web Parts manager. _manager = WebPartManager.GetCurrentWebPartManager(Page); // All radio buttons are disabled; the button settings show what the current state is. EnterSharedRadioButton.Enabled = false; ModifyStateRadioButton.Enabled = false; // If Web Parts manager is in User scope, set scope button. if (_manager.Personalization.Scope == PersonalizationScope.User) UserScopeRadioButton.Checked = true; else SharedScopeRadioButton.Checked = true; // Based on current user rights to enter Shared scope, set buttons. if (_manager.Personalization.CanEnterSharedScope) { EnterSharedRadioButton.Checked = true; No_Shared_Scope_Label.Visible = false; Toggle_Scope_Button.Enabled = true; } else { EnterSharedRadioButton.Checked = false; No_Shared_Scope_Label.Visible = true; Toggle_Scope_Button.Enabled = false; } // Based on current user rights to modify personalization state, set buttons. if (_manager.Personalization.IsModifiable) { ModifyStateRadioButton.Checked = true; Reset_User_Button.Enabled = true; } else { ModifyStateRadioButton.Checked = false; Reset_User_Button.Enabled = false; } } // Resets all of a user and shared personalization data for the page. protected void Reset_CurrentState_Button_Click(object src, EventArgs e) { // User must be authorized to modify state before a reset can occur. //When in user scope, all users by default can change their own data. if (_manager.Personalization.IsModifiable) { _manager.Personalization.ResetPersonalizationState(); } } // Allows authorized user to change personalization scope. protected void Toggle_Scope_Button_Click(object sender, EventArgs e) { if (_manager.Personalization.CanEnterSharedScope) { _manager.Personalization.ToggleScope(); } } </script> <div> <asp:Panel ID="Panel1" runat="server" Borderwidth="1" Width="208px" BackColor="lightgray" Font-Names="Verdana, Arial, Sans Serif" Height="214px" > <asp:Label ID="Label1" runat="server" Text="Page Scope" Font-Bold="True" Font-Size="8pt" Width="120px" /> <br /> <asp:RadioButton ID="UserScopeRadioButton" runat="server" Text="User" AutoPostBack="true" GroupName="Scope" Enabled="false" /> <asp:RadioButton ID="SharedScopeRadioButton" runat="server" Text="Shared" AutoPostBack="true" GroupName="Scope" Enabled="false" /> <br /> <asp:Label BorderStyle="None" Font-Bold="True" Font-Names="Courier New" ID="No_Shared_Scope_Label" Font-Size="Smaller" ForeColor="red" runat="server" Visible="false" Width="179px">User cannot enter Shared scope</asp:Label> <br /> <asp:Label ID="Label2" runat="server" Text="Current User Can:" Font-Bold="True" Font-Size="8pt" Width="165px" /> <br /> <asp:RadioButton ID="ModifyStateRadioButton" runat="server" Text="Modify State" Width="138px" /> <br /> <asp:RadioButton ID="EnterSharedRadioButton" runat="server" Text="Enter Shared Scope" AutoPostBack="true" /> <br /> <br /> <asp:Button ID="Toggle_Scope_Button" OnClick="Toggle_Scope_Button_Click" runat="server" Text="Change Scope" Width="186px" /><br /> <br /> <asp:Button ID="Reset_User_Button" OnClick="Reset_CurrentState_Button_Click" runat="server" Text="Reset Current Personalization" Width="185px" /></asp:Panel> </div>
- AspNetHostingPermission para trabajar en un entorno alojado en host. Valor de petición: LinkDemand; Valor de permiso: Minimal.
- AspNetHostingPermission para trabajar en un entorno alojado en host. Valor de petición: InheritanceDemand; Valor de permiso: Minimal.
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.Referencia
WebPartPersonalization (Miembros)System.Web.UI.WebControls.WebParts (Espacio de nombres)
Otros recursos
Páginas de elementos Web ASP.NETInformación general sobre la personalización de elementos Web
Tutorial: Implementar la personalización de elementos Web con un control de usuario
Personalización de elementos Web
Nota: de seguridad