Partager via


IWebPart Interface

Définition

Définit les propriétés d'interface utilisateur courantes utilisées par les contrôles WebPart ASP.NET.

public interface class IWebPart
public interface IWebPart
type IWebPart = interface
Public Interface IWebPart
Dérivé

Exemples

L’exemple de code suivant montre comment implémenter l’interface IWebPart dans un contrôle utilisateur. Il s’agit d’une implémentation simple qui montre au minimum comment implémenter les propriétés.

La première partie de l’exemple de code montre le contrôle utilisateur. Le contrôle utilisateur implémente toutes les propriétés de l’interface IWebPart , ainsi que deux propriétés publiques supplémentaires liées aux contrôles dans l’interface utilisateur. Les deux propriétés personnalisées utilisent chacune l’attribut Personalizable , qui permet d’enregistrer les valeurs de ces propriétés entre les sessions de navigateur. Notez que dans l’implémentation de la classe de base WebPart , toutes les propriétés de l’interface IWebPart sont également implémentées comme personnalisables, bien qu’elles ne soient pas dans cet exemple de code.

<%@ 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 deuxième partie de l’exemple de code montre la page Web qui héberge le contrôle utilisateur. La page a un WebPartZone contrôle, dans lequel le contrôle utilisateur est référencé. Notez que plusieurs valeurs de propriété de l’interface IWebPart sont définies de manière déclarative dans le balisage du contrôle utilisateur, ce qui lui permet de se comporter et d’apparaître comme un WebPart contrôle au moment de la conception et au moment de l’exécution. Si vous chargez la page dans un navigateur, vous pouvez utiliser l’interface utilisateur de la page pour illustrer la possibilité de modifier par programmation les valeurs des propriétés implémentées IWebPart au moment de l’exécution. Lorsque vous modifiez certaines valeurs de propriété, les modifications ne sont pas évidentes sur la page, mais sont visibles dans la source de la page (la TitleIconImageUrl propriété) ou sont stockées dans les données d’état de l’application (la CatalogIconImageUrl propriété).

Important

Cet exemple comprend une zone de texte qui accepte une entrée d'utilisateur, ce qui constitue une menace potentielle pour la sécurité. Par défaut, les pages web ASP.NET vérifient que l’entrée d’utilisateur n’inclut pas de script ou d’éléments HTML. Pour plus d’informations, consultez Vue d’ensemble des attaques de script.

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

Remarques

L’interface IWebPart fournit plusieurs propriétés orientées interface utilisateur qui améliorent l’expérience utilisateur de l’utilisation WebPart des contrôles. Lorsque vous créez des contrôles qui dérivent de la classe de base WebPart , vous obtenez une implémentation de toutes les propriétés de l’interface IWebPart , car la WebPart classe de base implémente cette interface.

Vous pouvez utiliser des contrôles utilisateur existants, des contrôles ASP.NET ou des contrôles serveur personnalisés qui n’héritent pas de la classe dans le WebPart cadre d’une application WebPart, et ils peuvent également utiliser ces propriétés orientées interface utilisateur déclarées par l’interface IWebPart . Si vous placez des contrôles serveur existants dans une WebPartZoneBase zone, au moment de l’exécution, ils sont encapsulés avec un GenericWebPart objet. Étant donné que la GenericWebPart classe hérite de la WebPart classe de base, elle permet aux contrôles serveur existants d’agir en tant que contrôles vrais WebPart et de leur ajouter les propriétés de l’interface IWebPart .

Si vous placez des contrôles serveur qui ne sont pas WebPart des contrôles dans des zones, ils peuvent utiliser les propriétés au moment de l’exécution IWebPart et vous pouvez également déclarer des valeurs pour ces propriétés sur les contrôles serveur dans le balisage de la page (au format de persistance de page). Toutefois, étant donné que ces propriétés ne sont disponibles que pour les contrôles serveur au moment de l’exécution, les fonctionnalités de codage au moment du design, telles qu’IntelliSense, ne reconnaissent pas les IWebPart propriétés déclarées sur les contrôles serveur. Les propriétés déclarées sur ces contrôles fonctionnent toujours lorsque vous chargez la page, mais Microsoft Visual Studio ne reconnaît pas les propriétés comme valides au moment de la conception. Si vous souhaitez ajouter les IWebPart propriétés aux contrôles utilisateur et serveur existants pour améliorer l’expérience utilisateur au moment du design, vous pouvez implémenter l’interface IWebPart dans un contrôle serveur.

La principale raison d’implémenter l’interface IWebPart est peut-être pour les contrôles qui ne prennent pas en charge l’utilisation de propriétés expando (personnalisées). Les propriétés Expando sont des chaînes qui peuvent être ajoutées dynamiquement à une classe en tant que propriété, au moyen de l’interface IAttributeAccessor . Les contrôles qui implémentent cette interface, y compris la WebControl classe et ses enfants, peuvent utiliser des propriétés expando. Par conséquent, tous les contrôles serveur ASP.NET, les contrôles personnalisés qui en dérivent, les contrôles utilisateur web et WebPart les contrôles prennent en charge l’utilisation de propriétés expando. Mais les contrôles personnalisés qui héritent directement de la classe de base Control ne prennent pas en charge les propriétés expando. Par conséquent, si vous déclarez ces contrôles dans un WebPartZone, vous ne pourrez pas déclarer les propriétés courantes IWebPart sur les contrôles, les propriétés telles que Title et Description. Si vous souhaitez utiliser ces propriétés avec ces contrôles, vous devez implémenter l’interface IWebPart .

Notes pour les responsables de l’implémentation

Normalement, vous n’avez pas besoin d’implémenter l’interface IWebPart , ni sur des contrôles serveur personnalisés WebPart , car la classe de base WebPart implémente déjà l’interface. Les contrôles personnalisés WebPart et les autres contrôles serveur placés dans WebPartZoneBase des zones peuvent utiliser toutes les IWebPart propriétés.

La principale raison d’implémenter l’interface IWebPart vous-même, que ce soit dans un contrôle personnalisé WebPart ou dans un autre contrôle serveur, est si vous souhaitez modifier l’implémentation par défaut. Par exemple, vous pouvez fournir des valeurs par défaut pour certaines propriétés. Une autre raison d’implémenter l’interface dans un contrôle utilisateur ou serveur est que l’expérience au moment de la conception de l’utilisation de ces propriétés sur le contrôle soit améliorée.

Propriétés

CatalogIconImageUrl

Obtient ou définit l'URL d'une image qui représente un contrôle WebPart dans un catalogue de contrôles.

Description

Obtient ou définit une brève expression qui résume la fonction d'un contrôle, en vue d'une utilisation dans les info-bulles et les catalogues de contrôles WebPart.

Subtitle

Obtient une chaîne concaténée avec la valeur de la propriété Title pour constituer le titre complet d'un contrôle WebPart.

Title

Obtient ou définit le titre d'un contrôle WebPart.

TitleIconImageUrl

Obtient ou définit l'URL d'une image utilisée pour représenter un composant WebPart dans la barre de titre du contrôle.

TitleUrl

Obtient ou définit une URL vers des informations supplémentaires relatives à un contrôle WebPart.

S’applique à

Voir aussi