IWebPart Interfaccia
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
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. |