IWebPart Interface

Definição

Define as propriedades comuns da interface de utilizador (UI) usadas pelos controlos ASP.NET WebPart.

public interface class IWebPart
public interface IWebPart
type IWebPart = interface
Public Interface IWebPart
Derivado

Exemplos

O exemplo de código seguinte demonstra como implementar a IWebPart interface num controlo de utilizador. Esta é uma implementação simples que mostra, minimamente, como implementar as propriedades.

A primeira parte do exemplo de código mostra o controlo do utilizador. O controlo do utilizador implementa todas as propriedades da IWebPart interface, mais duas propriedades públicas adicionais associadas aos controlos na interface do utilizador. As duas propriedades personalizadas utilizam cada uma o Personalizable atributo, que permite que os valores dessas propriedades sejam guardados entre as sessões do navegador. Note-se que na implementação da classe base WebPart , todas as propriedades da IWebPart interface também são implementadas como personalizáveis, embora não o sejam neste exemplo 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>

A segunda parte do exemplo de código mostra a página Web que aloja o controlo do utilizador. A página tem um WebPartZone controlo, dentro do qual o controlo do utilizador é referenciado. Note que vários IWebPart dos valores das propriedades da interface são definidos declarativamente na marcação para o controlo do utilizador, o que permite que se comporte e apareça de forma semelhante a um WebPart controlo em tempo de design e execução. Se carregar a página num navegador, pode usar a interface da página para demonstrar a capacidade de alterar programaticamente os valores das propriedades implementadas IWebPart em tempo de execução. Quando alteras alguns dos valores das propriedades, as alterações não são evidentes na página, mas são visíveis na fonte da página (a TitleIconImageUrl propriedade), ou são armazenadas nos dados de estado da aplicação (a CatalogIconImageUrl propriedade).

Importante

Este exemplo tem uma caixa de texto que aceita a entrada do utilizador, o que constitui uma potencial ameaça à segurança. Por defeito, as páginas Web do ASP.NET validam que a entrada do utilizador não inclui elementos de script ou HTML. Para mais informações, consulte Visão Geral dos Exploits de 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>

Observações

A IWebPart interface oferece várias propriedades orientadas para a interface de utilizador que melhoram a experiência do utilizador ao trabalhar com WebPart controlos. Quando crias controlos que derivam da classe base WebPart , obtém-se uma implementação de todas as propriedades da IWebPart interface, porque a WebPart classe base implementa essa interface.

Pode usar controlos de utilizador existentes, controlos ASP.NET ou controlos personalizados de servidor que não herdam da classe WebPart como parte de uma aplicação Web Parts, e também podem usar estas propriedades orientadas à interface de utilizador declaradas pela interface IWebPart. Se colocares os controlos existentes do servidor numa WebPartZoneBase zona, em tempo de execução eles estão envolvidos com um GenericWebPart objeto. Como a GenericWebPart classe herda da WebPart classe base, permite que os controlos existentes do servidor atuem como verdadeiros WebPart controlos e acrescenta-lhes as propriedades da IWebPart interface.

Se colocares os controlos do servidor que não WebPart são controlos em zonas, eles podem usar as IWebPart propriedades em tempo de execução, e também podes declarar valores para essas propriedades nos controlos do servidor na marcação da página (em formato de persistência da página). No entanto, como estas propriedades só estão disponíveis para os controlos do servidor em tempo de execução, funcionalidades de codificação em tempo de design, como o IntelliSense, não reconhecem IWebPart propriedades declaradas nos controlos do servidor. As propriedades declaradas nestes controlos continuam a funcionar quando carregas a página, mas Microsoft Visual Studio não reconhece as propriedades como válidas no momento do design. Se quiser adicionar as IWebPart propriedades aos controlos existentes do servidor e do utilizador para melhorar a experiência do utilizador em tempo de design, pode implementar a IWebPart interface num controlo do servidor.

Talvez a principal razão para implementar a IWebPart interface seja para controlos que não suportam o uso de propriedades expando (personalizadas). Propriedades expando são cadeias que podem ser adicionadas a uma classe dinamicamente como uma propriedade, através da IAttributeAccessor interface. Os controlos que implementam esta interface, incluindo a WebControl classe e os seus filhos, podem usar propriedades expando. Portanto, todos os controlos ASP.NET servidor, controlos personalizados que derivam deles, controlos de utilizador Web e controlos WebPart suportam o uso de propriedades expando. Mas os controlos personalizados que herdam diretamente da classe base Control não suportam propriedades expando. Assim, se declarar estes controlos dentro de um WebPartZone, não poderá declarar as propriedades comuns IWebPart nos controlos, propriedades como Title e Description. Se quiser usar estas propriedades com tais controlos, deve implementar a IWebPart interface.

Notas para Implementadores

Normalmente não é necessário implementar a IWebPart interface, nem em controlos personalizados WebPart nem em controlos de servidor, porque a classe base WebPart já implementa a interface. Controlos personalizados WebPart , e outros controlos de servidor colocados em WebPartZoneBase zonas, podem usar todas as IWebPart propriedades.

A principal razão para implementares a IWebPart interface tu próprio, seja num controlo personalizado WebPart ou noutro controlo de servidor, é se quiseres alterar a implementação padrão. Por exemplo, pode querer fornecer valores padrão para algumas das propriedades. Outra razão para implementar a interface num controlo de utilizador ou servidor é para que a experiência de trabalhar com estas propriedades no controlo seja melhorada.

Propriedades

Name Description
CatalogIconImageUrl

Obtém ou define a URL para uma imagem que representa um WebPart controlo num catálogo de controlos.

Description

Recebe ou define uma frase breve que resume o que um controlo faz, para uso em ToolTips e catálogos de WebPart controlos.

Subtitle

Obtém uma cadeia que é concatenada com o Title valor da propriedade para formar um título completo para um WebPart controlo.

Title

Recebe ou define o título de um WebPart controlo.

TitleIconImageUrl

Obtém ou define a URL de uma imagem usada para representar um controlo de Web Parts na barra de título própria do controlo.

TitleUrl

Obtém ou define uma URL para informação suplementar sobre um WebPart controlo.

Aplica-se a

Ver também