IWebPart Schnittstelle
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Definiert allgemeine Benutzeroberflächeneigenschaften, die von ASP.NET-WebPart-Steuerelementen verwendet werden.
public interface class IWebPart
public interface IWebPart
type IWebPart = interface
Public Interface IWebPart
- Abgeleitet
Beispiele
Im folgenden Codebeispiel wird veranschaulicht, wie die IWebPart Schnittstelle in einem Benutzersteuerelement implementiert wird. Dies ist eine einfache Implementierung, die nur minimal zeigt, wie die Eigenschaften implementiert werden.
Der erste Teil des Codebeispiels zeigt das Benutzersteuerelement. Das Benutzersteuerelement implementiert alle Eigenschaften der IWebPart Schnittstelle sowie zwei zusätzliche öffentliche Eigenschaften, die an Steuerelemente in der Benutzeroberfläche gebunden sind. Die beiden benutzerdefinierten Eigenschaften verwenden jeweils das Personalizable
-Attribut, mit dem die Werte in diesen Eigenschaften über Browsersitzungen hinweg gespeichert werden können. Beachten Sie, dass in der Basisklassenimplementierung WebPart alle Eigenschaften der IWebPart Schnittstelle auch als personalisierbar implementiert werden, obwohl sie sich nicht in diesem Codebeispiel befinden.
<%@ 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>
Der zweite Teil des Codebeispiels zeigt die Webseite, die das Benutzersteuerelement hostet. Die Seite verfügt über ein WebPartZone Steuerelement, in dem auf das Benutzersteuerelement verwiesen wird. Beachten Sie, dass einige der Eigenschaftenwerte der IWebPart Schnittstelle im Markup für das Benutzersteuerelement deklarativ festgelegt werden, sodass es sich sowohl verhalten als auch einem WebPart Steuerelement zur Entwurfs- und Laufzeit ähnelt. Wenn Sie die Seite in einem Browser laden, können Sie die Benutzeroberfläche auf der Seite verwenden, um zu veranschaulichen, dass die Werte der implementierten IWebPart Eigenschaften zur Laufzeit programmgesteuert geändert werden können. Wenn Sie einige der Eigenschaftswerte ändern, sind die Änderungen nicht auf der Seite sichtbar, sondern in der Seitenquelle (der TitleIconImageUrl -Eigenschaft) sichtbar oder werden in den Zustandsdaten der Anwendung (die CatalogIconImageUrl -Eigenschaft) gespeichert.
Wichtig
Dieses Beispiel umfasst ein Textfeld, das Benutzereingaben akzeptiert, die ein potenzielles Sicherheitsrisiko darstellen. Standardmäßig stellen ASP.NET-Webseiten sicher, dass Benutzereingaben keine Skript- oder HTML-Elemente enthalten. Weitere Informationen finden Sie unter Übersicht über Skriptangriffe.
<%@ 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>
Hinweise
Die IWebPart Schnittstelle bietet mehrere ui-orientierte Eigenschaften, die die Benutzerfreundlichkeit der Arbeit mit WebPart Steuerelementen verbessern. Wenn Sie Steuerelemente erstellen, die von der Basisklasse WebPart abgeleitet werden, erhalten Sie eine Implementierung aller Eigenschaften in der IWebPart Schnittstelle, da die WebPart Basisklasse diese Schnittstelle implementiert.
Sie können vorhandene Benutzersteuerelemente, ASP.NET-Steuerelemente oder benutzerdefinierte Serversteuerelemente verwenden, die nicht von der WebPart Klasse als Teil einer Webpartanwendung erben, und sie können auch diese benutzeroberflächenorientierten Eigenschaften verwenden, die von der IWebPart Schnittstelle deklariert wurden. Wenn Sie vorhandene Serversteuerelemente in einer WebPartZoneBase Zone platzieren, werden sie zur Laufzeit mit einem GenericWebPart -Objekt umschlossen. Da die GenericWebPart -Klasse von der WebPart Basisklasse erbt, können vorhandene Serversteuerelemente als echte WebPart Steuerelemente fungieren und ihnen die Eigenschaften der IWebPart Schnittstelle hinzufügen.
Wenn Sie Serversteuerelemente, die keine WebPart Steuerelemente sind, in Zonen platzieren, können sie die IWebPart Eigenschaften zur Laufzeit verwenden, und Sie können auch Werte für diese Eigenschaften für Serversteuerelemente im Markup der Seite deklarieren (im Seitenpersistenzformat). Da diese Eigenschaften jedoch nur zur Laufzeit für die Serversteuerelemente verfügbar sind, erkennen IWebPart Entwurfszeitcodierungsfeatures wie IntelliSense keine Eigenschaften, die für Serversteuerelemente deklariert sind. Deklarierte Eigenschaften für diese Steuerelemente funktionieren weiterhin, wenn Sie die Seite laden, aber Microsoft Visual Studio erkennt die Eigenschaften zur Entwurfszeit nicht als gültig an. Wenn Sie die IWebPart Eigenschaften vorhandenen Server- und Benutzersteuerelementen hinzufügen möchten, um die Benutzererfahrung während der Entwurfszeit zu verbessern, können Sie die IWebPart Schnittstelle in einem Serversteuerelement implementieren.
Möglicherweise liegt der Hauptgrund für die Implementierung der IWebPart Schnittstelle in Steuerelementen, die die Verwendung von expando (benutzerdefinierten) Eigenschaften nicht unterstützen. Expando-Eigenschaften sind Zeichenfolgen, die einer Klasse dynamisch als Eigenschaft mithilfe der IAttributeAccessor -Schnittstelle hinzugefügt werden können. Steuerelemente, die diese Schnittstelle implementieren, einschließlich der WebControl Klasse und ihrer untergeordneten Elemente, können expando-Eigenschaften verwenden. Daher unterstützen alle ASP.NET Serversteuerelemente, von ihnen abgeleitete benutzerdefinierte Steuerelemente, Webbenutzersteuerelemente und WebPart Steuerelemente die Verwendung von expando-Eigenschaften. Benutzerdefinierte Steuerelemente, die direkt von der Basisklasse Control erben, unterstützen jedoch keine Expando-Eigenschaften. Wenn Sie also diese Steuerelemente in einem WebPartZonedeklarieren, können Sie die allgemeinen IWebPart Eigenschaften für die Steuerelemente nicht deklarieren, z Title . B. und Description. Wenn Sie diese Eigenschaften mit solchen Steuerelementen verwenden möchten, müssen Sie die IWebPart Schnittstelle implementieren.
Hinweise für Ausführende
Normalerweise müssen Sie die IWebPart Schnittstelle nicht implementieren, weder für benutzerdefinierte WebPart Steuerelemente noch für Serversteuerelemente, da die Basisklasse WebPart die Schnittstelle bereits implementiert. Benutzerdefinierte WebPart Steuerelemente und andere Serversteuerelemente, die in WebPartZoneBase Zonen platziert werden, können alle IWebPart Eigenschaften verwenden.
Der Hauptgrund, die IWebPart Schnittstelle selbst zu implementieren, sei es in einem benutzerdefinierten WebPart Steuerelement oder einem anderen Serversteuerelement, ist, wenn Sie die Standardimplementierung ändern möchten. Sie können beispielsweise Standardwerte für einige der Eigenschaften angeben. Ein weiterer Grund für die Implementierung der Schnittstelle in einem Benutzer- oder Serversteuerelement ist, dass die Entwurfszeiterfahrung beim Arbeiten mit diesen Eigenschaften für das Steuerelement verbessert wird.
Eigenschaften
CatalogIconImageUrl |
Ruft die URL eines Bildes ab, mit dem ein WebPart-Steuerelement in einem Katalog von Steuerelementen dargestellt wird, oder legt diese fest. |
Description |
Ruft einen kurzen Ausdruck ab, der die Funktion des Steuerelements zusammenfasst und in QuickInfos und Katalogen von WebPart-Steuerelementen verwendet wird, oder legt diesen fest. |
Subtitle |
Ruft eine Zeichenfolge ab, die mit dem Wert der Title-Eigenschaft verkettet wird, um einen vollständigen Titel für ein WebPart-Steuerelement zu bilden. |
Title |
Ruft den Titel eines WebPart-Steuerelements ab oder legt diesen fest. |
TitleIconImageUrl |
Ruft die URL eines Bilds ab, mit dem ein Webparts-Steuerelement auf dessen eigener Titelleiste dargestellt wird, oder legt diese fest. |
TitleUrl |
Ruft eine URL zu ergänzenden Informationen über ein WebPart-Steuerelement ab oder legt diese fest. |