IWebPart Interface
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Definieert algemene eigenschappen van de gebruikersinterface (UI) die worden gebruikt door ASP.NET WebPart-besturingselementen.
public interface class IWebPart
public interface IWebPart
type IWebPart = interface
Public Interface IWebPart
- Afgeleid
Voorbeelden
In het volgende codevoorbeeld ziet u hoe u de IWebPart interface in een gebruikersbeheer implementeert. Dit is een eenvoudige implementatie die laat zien hoe u de eigenschappen minimaal implementeert.
In het eerste deel van het codevoorbeeld ziet u het gebruikersbeheer. Het gebruikersbesturingselement implementeert alle eigenschappen van de IWebPart interface, plus twee extra openbare eigenschappen die zijn gekoppeld aan besturingselementen in de gebruikersinterface. De twee aangepaste eigenschappen gebruiken elk het Personalizable kenmerk, waardoor de waarden in deze eigenschappen kunnen worden opgeslagen in browsersessies. Houd er rekening mee dat in de implementatie van de basisklasse WebPart ook alle eigenschappen van de IWebPart interface als persoonlijk kunnen worden geïmplementeerd, hoewel ze zich niet in dit codevoorbeeld bevinden.
<%@ 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>
In het tweede deel van het codevoorbeeld ziet u de webpagina waarop het gebruikersbeheer wordt gehost. De pagina heeft een WebPartZone besturingselement waarin naar het gebruikersbeheer wordt verwezen. U ziet dat verschillende eigenschapswaarden van de IWebPart interface declaratief worden ingesteld in de markeringen voor het gebruikersbesturingselement, waardoor het zich zowel gedraagt als lijkt op een WebPart besturingselement tijdens het ontwerp en de uitvoeringstijd. Als u de pagina in een browser laadt, kunt u de gebruikersinterface op de pagina gebruiken om de mogelijkheid te demonstreren om de waarden van de geïmplementeerde IWebPart eigenschappen tijdens runtime programmatisch te wijzigen. Wanneer u enkele eigenschapswaarden wijzigt, zijn de wijzigingen niet zichtbaar op de pagina, maar zichtbaar in de paginabron (de TitleIconImageUrl eigenschap) of worden ze opgeslagen in de statusgegevens van de toepassing (de CatalogIconImageUrl eigenschap).
Important
Dit voorbeeld heeft een tekstvak dat gebruikersinvoer accepteert. Dit is een mogelijke beveiligingsrisico. Standaard valideren ASP.NET webpagina's dat gebruikersinvoer geen script- of HTML-elementen bevat. Zie Overzicht van Script Exploits voor meer informatie.
<%@ 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>
Opmerkingen
De IWebPart interface biedt verschillende gebruikersinterfacegeoriënteerde eigenschappen die de gebruikerservaring van het werken met WebPart besturingselementen verbeteren. Wanneer u besturingselementen maakt die zijn afgeleid van de basisklasse WebPart , krijgt u een implementatie van alle eigenschappen in de IWebPart interface, omdat deze interface door de WebPart basisklasse wordt geïmplementeerd.
U kunt bestaande gebruikersbesturingselementen, ASP.NET besturingselementen of aangepaste serverbesturingselementen gebruiken die niet overnemen van de klasse WebPart als onderdeel van een webonderdelentoepassing, en ze kunnen ook gebruikmaken van deze gebruikersinterfacegeoriënteerde eigenschappen die zijn gedeclareerd door de IWebPart-interface. Als u bestaande serverbesturingselementen in een WebPartZoneBase zone plaatst, worden deze tijdens runtime verpakt met een GenericWebPart object. Omdat de GenericWebPart klasse wordt overgenomen van de WebPart basisklasse, kunnen bestaande serverbesturingselementen fungeren als echte WebPart besturingselementen en worden hieraan de eigenschappen van de IWebPart interface toegevoegd.
Als u serverbesturingselementen plaatst die geen WebPart besturingselementen in zones zijn, kunnen ze de IWebPart eigenschappen tijdens runtime gebruiken en kunt u ook waarden declareren voor deze eigenschappen op serverbesturingselementen in de opmaak van de pagina (in de indeling voor paginapersistentie). Omdat deze eigenschappen echter alleen beschikbaar zijn voor de besturingselementen van de server tijdens runtime, herkent IWebPart ontwerp-tijdcoderingsfuncties zoals IntelliSense geen eigenschappen die zijn gedeclareerd op serverbesturingselementen. Gedeclareerde eigenschappen op deze besturingselementen werken nog steeds wanneer u de pagina laadt, maar Microsoft Visual Studio de eigenschappen niet herkent als geldig tijdens het ontwerp. Als u de IWebPart eigenschappen wilt toevoegen aan bestaande server- en gebruikersbesturingselementen om de ontwerp-gebruikerservaring te verbeteren, kunt u de IWebPart interface in een serverbesturingselement implementeren.
Misschien is de belangrijkste reden om de IWebPart interface te implementeren voor besturingselementen die het gebruik van expando-eigenschappen (aangepast) niet ondersteunen. Expando-eigenschappen zijn tekenreeksen die dynamisch als eigenschap aan een klasse kunnen worden toegevoegd door middel van de IAttributeAccessor interface. Besturingselementen die deze interface implementeren, met inbegrip van de WebControl klasse en de onderliggende elementen, kunnen expando-eigenschappen gebruiken. Daarom ondersteunen alle ASP.NET serverbesturingselementen, aangepaste besturingselementen die hiervan zijn afgeleid, webgebruikersbesturingselementen en WebPart besturingselementen het gebruik van expando-eigenschappen. Aangepaste besturingselementen die rechtstreeks van de basisklasse Control overnemen, bieden echter geen ondersteuning voor expando-eigenschappen. Dus als u deze besturingselementen binnen een WebPartZonedeclareert, kunt u de gemeenschappelijke IWebPart eigenschappen van de besturingselementen, eigenschappen zoals Title en Description. Als u deze eigenschappen met dergelijke besturingselementen wilt gebruiken, moet u de IWebPart interface implementeren.
Notities voor uitvoerders
Normaal gesproken hoeft u de IWebPart interface niet te implementeren, hetzij op aangepaste WebPart besturingselementen of serverbesturingselementen, omdat de basisklasse WebPart de interface al implementeert. Aangepaste WebPart besturingselementen en andere serverbesturingselementen die in WebPartZoneBase zones worden geplaatst, kunnen alle IWebPart eigenschappen gebruiken.
De belangrijkste reden om de IWebPart interface zelf te implementeren, in een aangepast WebPart besturingselement of een ander serverbeheer, is als u de standaard implementatie wilt wijzigen. U wilt bijvoorbeeld standaardwaarden opgeven voor sommige eigenschappen. Een andere reden om de interface in een gebruikers- of serverbesturingselement te implementeren, is dat de ontwerpervaring voor het werken met deze eigenschappen op het besturingselement wordt verbeterd.
Eigenschappen
| Name | Description |
|---|---|
| CatalogIconImageUrl |
Hiermee haalt u de URL op of stelt u deze in op een afbeelding die een WebPart besturingselement in een catalogus met besturingselementen vertegenwoordigt. |
| Description |
Hiermee haalt u een korte woordgroep op die samenvat wat een besturingselement doet, voor gebruik in Knopinfo en catalogi van WebPart besturingselementen. |
| Subtitle |
Hiermee haalt u een tekenreeks op die is samengevoegd met de Title eigenschapswaarde om een volledige titel voor een WebPart besturingselement te vormen. |
| Title |
Hiermee haalt u de titel van een WebPart besturingselement op of stelt u deze in. |
| TitleIconImageUrl |
Hiermee haalt u de URL op of stelt u de URL in op een afbeelding die wordt gebruikt om een besturingselement voor webonderdelen weer te geven in de eigen titelbalk van het besturingselement. |
| TitleUrl |
Hiermee wordt een URL opgehaald of ingesteld op aanvullende informatie over een WebPart besturingselement. |