IWebPart Interfaz

Definición

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.

Se aplica a

Consulte también