Condividi tramite


IWebPart Interfaccia

Definizione

Definisce le proprietà dell'interfaccia utente comune utilizzate dai controlli WebPart ASP.NET.

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 minima parte 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 l'attributo Personalizable , che consente di salvare i valori in tali proprietà nelle sessioni del browser. Si noti che nell'implementazione della classe base WebPart tutte le proprietà dell'interfaccia IWebPart vengono implementate come personalizzabili, anche se non sono 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 ha un WebPartZone controllo , all'interno del quale viene fatto riferimento al controllo utente. Si noti che diversi valori delle proprietà dell'interfaccia IWebPart 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 di stato dell'applicazione (la CatalogIconImageUrl proprietà ).

Importante

L'esempio include una casella di testo che accetta l'input dell'utente e rappresenta quindi una potenziale minaccia alla sicurezza. Per impostazione predefinita, le pagine Web ASP.NET verificano che l'input dell'utente non includa script o elementi HTML. Per altre informazioni, vedere Cenni preliminari sugli attacchi tramite 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 WebPart dei controlli. Quando si creano controlli che derivano dalla classe base, si ottiene un'implementazione di tutte le proprietà nell'interfacciaIWebPart, perché la WebPart classe di base WebPart implementa questa interfaccia.

È possibile usare controlli utente esistenti, controlli ASP.NET 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 li aggiunge alle proprietà dell'interfaccia IWebPart .

Se si inseriscono controlli server che non WebPart sono controlli nelle zone, è possibile usare le IWebPart proprietà in fase di esecuzione ed è anche possibile dichiarare i valori per tali proprietà nei controlli server nel markup della pagina (in 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 funzionano ancora 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 WebControl classe e i 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 delle proprietà expando. Ma i controlli personalizzati che ereditano direttamente dalla classe di base Control non supportano le proprietà expando. Pertanto, se si dichiarano questi controlli all'interno di , WebPartZonenon 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 di base WebPart implementa già l'interfaccia . I controlli personalizzati WebPart e altri controlli server posizionati in 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 desidera 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 venga migliorata.

Proprietà

CatalogIconImageUrl

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

Description

Ottiene o imposta una breve frase che riepiloga la funzione del controllo da utilizzare nelle descrizioni comando e nei cataloghi dei controlli WebPart.

Subtitle

Ottiene una stringa concatenata al valore della proprietà Title per creare un titolo completo per un controllo WebPart.

Title

Ottiene o imposta il titolo di un controllo WebPart.

TitleIconImageUrl

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

TitleUrl

Ottiene o imposta un URL di informazioni supplementari relative a un controllo WebPart.

Si applica a

Vedi anche