IWebPart Interfaz
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Define propiedades de interfaz de usuario (UI) comunes utilizadas por controles WebPart ASP.NET.
public interface class IWebPart
public interface IWebPart
type IWebPart = interface
Public Interface IWebPart
- Derivado
Ejemplos
En el ejemplo de código siguiente se muestra cómo implementar la IWebPart interfaz en un control de usuario. Se trata de una implementación sencilla que muestra mínimamente cómo implementar las propiedades.
La primera parte del ejemplo de código muestra el control de usuario. El control de usuario implementa todas las propiedades de la IWebPart interfaz, además de dos propiedades públicas adicionales vinculadas a los controles de la interfaz de usuario. Cada una de las dos propiedades personalizadas usa el Personalizable
atributo , que permite guardar los valores de esas propiedades en las sesiones del explorador. Tenga en cuenta que en la implementación de la clase base WebPart , todas las propiedades de la IWebPart interfaz también se implementan como personalizables, aunque no están en este ejemplo de código.
<%@ control language="C#" classname="AccountUserControlCS"%>
<%@ implements interface="System.Web.UI.WebControls.WebParts.IWebPart" %>
<script runat="server">
private string m_Description;
private string m_Title;
private string m_TitleIconImageUrl;
private string m_TitleUrl;
private string m_CatalogIconImageUrl;
[Personalizable]
public string UserName
{
get
{
if(String.IsNullOrEmpty(Textbox1.Text))
return String.Empty;
else
return Textbox1.Text;
}
set
{
Textbox1.Text = value;
}
}
[Personalizable]
public string Phone
{
get
{
if(String.IsNullOrEmpty(Textbox2.Text))
return String.Empty;
else
return Textbox2.Text;
}
set
{
Textbox2.Text = value;
}
}
// <snippet3>
public string Description
{
get
{
object objTitle = ViewState["Description"];
if (objTitle == null)
return String.Empty;
return (string)objTitle;
}
set
{
ViewState["Description"] = value;
}
}
// </snippet3>
// <snippet4>
public string Title
{
get
{
object objTitle = ViewState["Title"];
if (objTitle == null)
return String.Empty;
return (string)objTitle;
}
set
{
ViewState["Title"] = value;
}
}
// </snippet4>
// <snippet5>
public string Subtitle
{
get
{
object objSubTitle = ViewState["Subtitle"];
if (objSubTitle == null)
return "My Subtitle";
return (string)objSubTitle;
}
}
// </snippet5>
// <snippet6>
public string TitleIconImageUrl
{
get
{
object objTitle = ViewState["TitleIconImageUrl"];
if (objTitle == null)
return String.Empty;
return (string)objTitle;
}
set
{
ViewState["TitleIconImageUrl"] = value;
}
}
// </snippet6>
// <snippet7>
public string TitleUrl
{
get
{
object objTitle = ViewState["TitleUrl"];
if (objTitle == null)
return String.Empty;
return (string)objTitle;
}
set
{
ViewState["TitleUrl"] = value;
}
}
// </snippet7>
// <snippet8>
public string CatalogIconImageUrl
{
get
{
object objTitle = ViewState["CatalogIconImageUrl"];
if (objTitle == null)
return String.Empty;
return (string)objTitle;
}
set
{
ViewState["CatalogIconImageUrl"] = value;
}
}
// </snippet8>
// <snippet9>
// Update the selected IWebPart property value.
void Button1_Click(object sender, EventArgs e)
{
String propertyValue = Server.HtmlEncode(TextBox3.Text);
TextBox3.Text = String.Empty;
switch (RadioButtonList1.SelectedValue)
{
case "title":
this.Title = propertyValue;
break;
case "description":
this.Description = propertyValue;
break;
case "catalogiconimageurl":
this.CatalogIconImageUrl = propertyValue;
break;
case "titleiconimageurl":
this.TitleIconImageUrl = propertyValue;
break;
case "titleurl":
this.TitleUrl = propertyValue;
break;
default:
break;
}
}
// </snippet9>
</script>
<div>
<asp:label id="Label1" runat="server" AssociatedControlID="Textbox1">
Name</asp:label>
<asp:textbox id="Textbox1" runat="server" />
</div>
<div>
<asp:label id="Label2" runat="server" AssociatedControlID="Textbox2">
Phone</asp:label>
<asp:textbox id="Textbox2" runat="server"></asp:textbox>
</div>
<div>
<asp:button id="Button2" runat="server" text="Save Form Values" />
</div>
<hr />
<asp:Label ID="Label3" Runat="server" Text="Label"
AssociatedControlID="RadioButtonList1">
<h3>Update selected IWebPart property values.</h3>
</asp:Label>
<asp:RadioButtonList ID="RadioButtonList1" Runat="server">
<asp:ListItem Value="title">Title</asp:ListItem>
<asp:ListItem Value="description">Description</asp:ListItem>
<asp:ListItem Value="catalogiconimageurl">CatalogIconImageUrl</asp:ListItem>
<asp:ListItem Value="titleiconimageurl">TitleIconImageUrl</asp:ListItem>
<asp:ListItem Value="titleurl">TitleUrl</asp:ListItem>
</asp:RadioButtonList>
<br />
<asp:Label ID="Label4" runat="server" Text="Label"
AssociatedControlID="TextBox3">
Property Value:
</asp:Label>
<asp:TextBox ID="TextBox3" runat="server">
</asp:TextBox>
<br />
<asp:Button ID="Button1" runat="server"
Text="Update Property"
OnClick="Button1_Click">
</asp:Button>
<%@ control language="VB" classname="AccountUserControlVB"%>
<%@ implements interface="System.Web.UI.WebControls.WebParts.IWebPart" %>
<script runat="server">
Private m_Description As String
Private m_Title As String
Private m_TitleIconImageUrl As String
Private m_TitleUrl As String
Private m_CatalogIconImageUrl As String
<Personalizable()> _
Public Property UserName() As String
Get
If String.IsNullOrEmpty(Textbox1.Text) Then
Return String.Empty
Else
Return Textbox1.Text
End If
End Get
Set(ByVal value As String)
Textbox1.Text = Value
End Set
End Property
<Personalizable()> _
Public Property Phone() As String
Get
If String.IsNullOrEmpty(Textbox2.Text) Then
Return String.Empty
Else
Return Textbox2.Text
End If
End Get
Set(ByVal value As String)
Textbox2.Text = Value
End Set
End Property
' <snippet3>
Public Property Description() As String _
Implements IWebPart.Description
Get
Dim objTitle As Object = ViewState("Description")
If objTitle Is Nothing Then
Return String.Empty
End If
Return CStr(objTitle)
End Get
Set(ByVal value As String)
ViewState("Description") = value
End Set
End Property
' </snippet3>
' <snippet4>
Public Property Title() As String _
Implements IWebPart.Title
Get
Dim objTitle As Object = ViewState("Title")
If objTitle Is Nothing Then
Return String.Empty
End If
Return CStr(objTitle)
End Get
Set(ByVal value As String)
ViewState("Title") = value
End Set
End Property
' </snippet4>
' <snippet5>
ReadOnly Property Subtitle() As String _
Implements IWebPart.Subtitle
Get
Dim objSubTitle As Object = ViewState("Subtitle")
If objSubTitle Is Nothing Then
Return "My Subtitle"
End If
Return CStr(objSubTitle)
End Get
End Property
' </snippet5>
' <snippet6>
Public Property TitleIconImageUrl() As String _
Implements IWebPart.TitleIconImageUrl
Get
Dim objTitle As Object = ViewState("TitleIconImageUrl")
If objTitle Is Nothing Then
Return String.Empty
End If
Return CStr(objTitle)
End Get
Set(ByVal value As String)
ViewState("TitleIconImageUrl") = value
End Set
End Property
' </snippet6>
' <snippet7>
Public Property TitleUrl() As String _
Implements IWebPart.TitleUrl
Get
Dim objTitle As Object = ViewState("TitleUrl")
If objTitle Is Nothing Then
Return String.Empty
End If
Return CStr(objTitle)
End Get
Set(ByVal value As String)
ViewState("TitleUrl") = value
End Set
End Property
' </snippet7>
' <snippet8>
Public Property CatalogIconImageUrl() As String _
Implements IWebPart.CatalogIconImageUrl
Get
Dim objTitle As Object = ViewState("CatalogIconImageUrl")
If objTitle Is Nothing Then
Return String.Empty
End If
Return CStr(objTitle)
End Get
Set(ByVal value As String)
ViewState("CatalogIconImageUrl") = value
End Set
End Property
' </snippet8>
' <snippet9>
' Update the selected IWebPart property value.
Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs)
Dim propertyValue As String = Server.HtmlEncode(TextBox3.Text)
TextBox3.Text = String.Empty
Select Case RadioButtonList1.SelectedValue
Case "title"
Me.Title = propertyValue
Case "description"
Me.Description = propertyValue
Case "catalogiconimageurl"
Me.CatalogIconImageUrl = propertyValue
Case "titleiconimageurl"
Me.TitleIconImageUrl = propertyValue
Case "titleurl"
Me.TitleUrl = propertyValue
Case Else
End Select
End Sub 'Button1_Click
' </snippet9>
</script>
<div>
<asp:label id="Label1" runat="server" AssociatedControlID="Textbox1">
Name</asp:label>
<asp:textbox id="Textbox1" runat="server" />
</div>
<div>
<asp:label id="Label2" runat="server" AssociatedControlID="Textbox2">
Phone</asp:label>
<asp:textbox id="Textbox2" runat="server"></asp:textbox>
</div>
<div>
<asp:button id="Button2" runat="server" text="Save Form Values" />
</div>
<hr />
<asp:Label ID="Label3" Runat="server" AssociatedControlID="RadioButtonList1">
<h3>Update selected IWebPart property values.</h3>
</asp:Label>
<asp:RadioButtonList ID="RadioButtonList1" Runat="server">
<asp:ListItem Value="title">Title</asp:ListItem>
<asp:ListItem Value="description">Description</asp:ListItem>
<asp:ListItem Value="catalogiconimageurl">CatalogIconImageUrl</asp:ListItem>
<asp:ListItem Value="titleiconimageurl">TitleIconImageUrl</asp:ListItem>
<asp:ListItem Value="titleurl">TitleUrl</asp:ListItem>
</asp:RadioButtonList>
<br />
<asp:Label ID="Label4" runat="server" AssociatedControlID="TextBox3">
Property Value:
</asp:Label>
<asp:TextBox ID="TextBox3" runat="server">
</asp:TextBox>
<br />
<asp:Button ID="Button1" runat="server"
Text="Update Property"
OnClick="Button1_Click">
</asp:Button>
La segunda parte del ejemplo de código muestra la página web que hospeda el control de usuario. La página tiene un WebPartZone control, dentro del cual se hace referencia al control de usuario. Observe que varios de los valores de propiedad de la IWebPart interfaz se establecen declarativamente en el marcado del control de usuario, lo que permite que se comporte y parezca similar a un WebPart control en tiempo de diseño y tiempo de ejecución. Si carga la página en un explorador, puede usar la interfaz de usuario de la página para demostrar la capacidad de cambiar mediante programación los valores de las propiedades implementadas IWebPart en tiempo de ejecución. Al cambiar algunos de los valores de propiedad, los cambios no son evidentes en la página, pero son visibles en el origen de la página (la TitleIconImageUrl propiedad ) o se almacenan en los datos de estado de la aplicación (la CatalogIconImageUrl propiedad ).
Importante
Este ejemplo tiene un cuadro de texto que acepta datos proporcionados por el usuario, lo que puede suponer una amenaza para la seguridad. De forma predeterminada, ASP.NET Web Pages valida que los datos proporcionados por el usuario no incluyen elementos HTML ni de script. Para más información, consulte Información general sobre los ataques mediante scripts.
<%@ page language="c#" %>
<%@ register tagprefix="uc1"
tagname="AccountUserControlCS"
src="AccountUserControlcs.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>
Personalizable User Control with IWebPart Properties
</title>
</head>
<body>
<form id="form1" runat="server">
<asp:webpartmanager id="WebPartManager1" runat="server" />
<asp:webpartzone
id="zone1"
runat="server"
headertext="Main"
CloseVerb-Enabled="false">
<zonetemplate>
<uc1:AccountUserControlCS
runat="server"
id="accountwebpart"
title="Account Form"
Description="Account Form with default values."
CatalogIconImageUrl="MyCatalogIcon.gif"
TitleIconImageUrl="MyTitleIcon.gif"
TitleUrl="MyUrl.html"/>
</zonetemplate>
</asp:webpartzone>
</form>
</body>
</html>
<%@ page language="VB" %>
<%@ register tagprefix="uc1"
tagname="AccountUserControlVB"
src="AccountUserControlvb.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>
Personalizable User Control with IWebPart Properties
</title>
</head>
<body>
<form id="form1" runat="server">
<asp:webpartmanager id="WebPartManager1" runat="server" />
<asp:webpartzone
id="zone1"
runat="server"
headertext="Main"
CloseVerb-Enabled="false">
<zonetemplate>
<uc1:AccountUserControlVB
runat="server"
id="accountwebpart"
title="Account Form"
Description="Account Form with default values."
CatalogIconImageUrl="MyCatalogIcon.gif"
TitleIconImageUrl="MyTitleIcon.gif"
TitleUrl="MyUrl.html"/>
</zonetemplate>
</asp:webpartzone>
</form>
</body>
</html>
Comentarios
La IWebPart interfaz proporciona varias propiedades orientadas a la interfaz de usuario que mejoran la experiencia del usuario de trabajar con WebPart controles. Al crear controles que derivan de la clase base WebPart , se obtiene una implementación de todas las propiedades de la IWebPart interfaz, ya que la WebPart clase base implementa esta interfaz.
Puede usar controles de usuario existentes, controles de ASP.NET o controles de servidor personalizados que no heredan de la WebPart clase como parte de una aplicación de elementos web, y también pueden usar estas propiedades orientadas a la interfaz de usuario declaradas por la IWebPart interfaz. Si coloca controles de servidor existentes en una WebPartZoneBase zona, en tiempo de ejecución se encapsulan con un GenericWebPart objeto . Dado que la GenericWebPart clase hereda de la WebPart clase base, permite que los controles de servidor existentes actúen como controles verdaderos WebPart y los agrega a las propiedades de la IWebPart interfaz.
Si coloca controles de servidor que no WebPart son controles en zonas, pueden usar las IWebPart propiedades en tiempo de ejecución y también puede declarar valores para esas propiedades en los controles de servidor en el marcado de la página (en formato de persistencia de página). Sin embargo, dado que estas propiedades solo están disponibles para los controles de servidor en tiempo de ejecución, las características de codificación en tiempo de diseño, como IntelliSense, no reconocen IWebPart las propiedades declaradas en los controles de servidor. Las propiedades declaradas en estos controles siguen funcionando al cargar la página, pero Microsoft Visual Studio no reconoce las propiedades como válidas en tiempo de diseño. Si desea agregar las IWebPart propiedades a los controles de usuario y servidor existentes para mejorar la experiencia del usuario en tiempo de diseño, puede implementar la IWebPart interfaz en un control de servidor.
Quizás la razón principal para implementar la IWebPart interfaz es para los controles que no admiten el uso de propiedades expando (personalizadas). Las propiedades expando son cadenas que se pueden agregar a una clase dinámicamente como una propiedad, mediante la IAttributeAccessor interfaz . Los controles que implementan esta interfaz, incluida la WebControl clase y sus elementos secundarios, pueden usar propiedades expando. Por lo tanto, todos los controles de servidor ASP.NET, controles personalizados que derivan de ellos, controles de usuario web y WebPart controles admiten el uso de propiedades expando. Pero los controles personalizados que heredan directamente de la clase base Control no admiten propiedades expando. Por lo tanto, si declara estos controles dentro de , WebPartZoneno podrá declarar las propiedades comunes IWebPart en los controles, propiedades como Title y Description. Si desea usar estas propiedades con estos controles, debe implementar la IWebPart interfaz .
Notas a los implementadores
Normalmente no es necesario implementar la IWebPart interfaz, ya sea en controles personalizados WebPart o controles de servidor, ya que la clase base WebPart ya implementa la interfaz . Los controles personalizados WebPart y otros controles de servidor que se colocan en WebPartZoneBase zonas pueden usar todas las IWebPart propiedades.
La razón principal para implementar la IWebPart interfaz usted mismo, ya sea en un control personalizado WebPart u otro control de servidor, es si desea cambiar la implementación predeterminada. Por ejemplo, puede que desee proporcionar valores predeterminados para algunas de las propiedades. Otra razón para implementar la interfaz en un control de usuario o servidor es que la experiencia en tiempo de diseño de trabajar con estas propiedades en el control se mejorará.
Propiedades
CatalogIconImageUrl |
Obtiene o establece la dirección URL de una imagen que representa un control WebPart en un catálogo de controles. |
Description |
Obtiene o establece una frase breve que resume lo que hace un control, para que se utilice en la información sobre herramientas y en los catálogos de controles WebPart. |
Subtitle |
Obtiene una cadena que se concatena con el valor de la propiedad Title para formar un título completo para un control WebPart. |
Title |
Obtiene o establece el título de un control WebPart. |
TitleIconImageUrl |
Obtiene o establece la dirección URL de una imagen que se utiliza para representar un control de elementos web en la propia barra de título del control. |
TitleUrl |
Obtiene o establece una dirección URL de información complementaria sobre un control WebPart. |