Condividi tramite


IWebPart Interfaccia

Definizione

Definisce le proprietà comuni dell'interfaccia utente usate dai controlli ASP.NET WebPart .

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

Esempio

Nell'esempio di codice seguente viene illustrato come implementare l'interfaccia IWebPart in un controllo utente. Si tratta di un'implementazione semplice che mostra in modo minimo come implementare le proprietà.

La prima parte dell'esempio di codice mostra il controllo utente. Il controllo utente implementa tutte le proprietà dell'interfaccia IWebPart , oltre a due proprietà pubbliche aggiuntive associate ai controlli nell'interfaccia utente. Le due proprietà personalizzate usano ognuno l'attributo Personalizable , che consente di salvare i valori in tali proprietà tra le sessioni del browser. Si noti che nell'implementazione della classe di base WebPart tutte le proprietà dell'interfaccia IWebPart vengono implementate come personalizzabili, anche se non sono incluse in questo esempio di codice.

<%@ 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 seconda parte dell'esempio di codice mostra la pagina Web che ospita il controllo utente. La pagina dispone di un WebPartZone controllo in cui viene fatto riferimento al controllo utente. Si noti che diversi valori delle IWebPart proprietà dell'interfaccia vengono impostati in modo dichiarativo nel markup per il controllo utente, che consente di comportarsi e apparire simili a un WebPart controllo in fase di progettazione e in fase di esecuzione. Se si carica la pagina in un browser, è possibile usare l'interfaccia utente nella pagina per dimostrare la possibilità di modificare a livello di codice i valori delle proprietà implementate IWebPart in fase di esecuzione. Quando si modificano alcuni valori delle proprietà, le modifiche non sono evidenti nella pagina, ma sono visibili nell'origine della pagina (proprietà TitleIconImageUrl ) o vengono archiviate nei dati sullo stato dell'applicazione (la CatalogIconImageUrl proprietà ).

Importante

In questo esempio è presente una casella di testo che accetta l'input dell'utente, che rappresenta una potenziale minaccia per la sicurezza. Per impostazione predefinita, ASP.NET pagine Web verificare che l'input dell'utente non includa elementi SCRIPT o HTML. Per altre informazioni, vedere Cenni preliminari sugli exploit di 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>

Commenti

L'interfaccia IWebPart fornisce diverse proprietà orientate all'interfaccia utente che migliorano l'esperienza utente di utilizzo dei WebPart controlli. Quando si creano controlli che derivano dalla classe base WebPart , si ottiene un'implementazione di tutte le proprietà nell'interfaccia IWebPart , perché la WebPart classe di base implementa questa interfaccia.

È possibile usare controlli utente esistenti, ASP.NET controlli o controlli server personalizzati che non ereditano dalla WebPart classe come parte di un'applicazione Web part e possono anche usare queste proprietà orientate all'interfaccia utente dichiarate dall'interfaccia IWebPart . Se si inseriscono controlli server esistenti in una WebPartZoneBase zona, in fase di esecuzione vengono inclusi in un GenericWebPart oggetto . Poiché la GenericWebPart classe eredita dalla WebPart classe base, consente ai controlli server esistenti di fungere da controlli true WebPart e aggiunge loro le proprietà dell'interfaccia IWebPart .

Se si inseriscono controlli server che non WebPart sono controlli nelle zone, possono usare le IWebPart proprietà in fase di esecuzione ed è anche possibile dichiarare valori per tali proprietà nei controlli server nel markup della pagina (nel formato di persistenza della pagina). Tuttavia, poiché queste proprietà sono disponibili solo per i controlli server in fase di esecuzione, le funzionalità di codifica in fase di progettazione, ad esempio IntelliSense, non riconoscono IWebPart le proprietà dichiarate nei controlli server. Le proprietà dichiarate in questi controlli continuano a funzionare quando si carica la pagina, ma Microsoft Visual Studio non riconosce le proprietà come valide in fase di progettazione. Se si desidera aggiungere le IWebPart proprietà ai controlli server e utente esistenti per migliorare l'esperienza utente in fase di progettazione, è possibile implementare l'interfaccia IWebPart in un controllo server.

Forse il motivo principale per implementare l'interfaccia IWebPart è per i controlli che non supportano l'uso di proprietà expando (personalizzate). Le proprietà Expando sono stringhe che possono essere aggiunte a una classe in modo dinamico come proprietà, tramite l'interfaccia IAttributeAccessor . I controlli che implementano questa interfaccia, inclusa la classe e i WebControl relativi elementi figlio, possono usare le proprietà expando. Pertanto, tutti i controlli server ASP.NET, i controlli personalizzati che derivano da essi, i controlli utente Web e WebPart i controlli supportano l'uso di proprietà expando. Ma i controlli personalizzati che ereditano direttamente dalla classe base Control non supportano le proprietà expando. Pertanto, se si dichiarano questi controlli all'interno di un WebPartZoneoggetto , non sarà possibile dichiarare le proprietà comuni IWebPart nei controlli, proprietà come Title e Description. Se si desidera utilizzare queste proprietà con tali controlli, è necessario implementare l'interfaccia IWebPart .

Note per gli implementatori

In genere non è necessario implementare l'interfaccia IWebPart nei controlli personalizzati WebPart o nei controlli server, perché la classe base WebPart implementa già l'interfaccia . I controlli personalizzati WebPart e altri controlli server posizionati nelle WebPartZoneBase zone possono usare tutte le IWebPart proprietà.

Il motivo principale per implementare manualmente l'interfaccia IWebPart , sia in un controllo personalizzato WebPart che in un altro controllo server, è se si vuole modificare l'implementazione predefinita. Ad esempio, è possibile specificare valori predefiniti per alcune delle proprietà. Un altro motivo per implementare l'interfaccia in un controllo utente o server è in modo che l'esperienza di progettazione dell'uso di queste proprietà nel controllo verrà migliorata.

Proprietà

Nome Descrizione
CatalogIconImageUrl

Ottiene o imposta l'URL di un'immagine che rappresenta un WebPart controllo in un catalogo di controlli.

Description

Ottiene o imposta una breve frase che riepiloga le operazioni di un controllo da utilizzare in Descrizioni comandi e cataloghi di WebPart controlli.

Subtitle

Ottiene una stringa concatenata con il valore della Title proprietà per formare un titolo completo per un WebPart controllo.

Title

Ottiene o imposta il titolo di un WebPart controllo.

TitleIconImageUrl

Ottiene o imposta l'URL di un'immagine utilizzata per rappresentare un controllo Web part nella barra del titolo del controllo.

TitleUrl

Ottiene o imposta un URL per informazioni supplementari su un WebPart controllo .

Si applica a

Vedi anche