IWebPart Interface
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
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. |