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 minimal zeigt, wie die Eigenschaften implementiert werden.
Der erste Teil des Codebeispiels zeigt das Benutzersteuerelement. Das Benutzersteuerelement implementiert alle Eigenschaften der Schnittstelle und zwei zusätzliche öffentliche Eigenschaften, die an Steuerelemente in der IWebPart Benutzeroberfläche gebunden sind. Die beiden benutzerdefinierten Eigenschaften verwenden Personalizable
jedes Attribut, wodurch die Werte in diesen Eigenschaften über Browsersitzungen gespeichert werden können. Beachten Sie, dass in der Basisklassenimplementierung WebPart alle Eigenschaften der IWebPart Schnittstelle auch als personalisierbar implementiert werden, obwohl sie in diesem Codebeispiel nicht enthalten sind.
<%@ 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, auf der das Benutzersteuerelement gehostet wird. Die Seite verfügt über ein WebPartZone Steuerelement, in dem das Benutzersteuerelement referenziert wird. Beachten Sie, dass mehrere Eigenschaftenwerte der IWebPart Schnittstelle deklarativ im Markup für das Benutzersteuerelement festgelegt werden, was es ermöglicht, sich sowohl verhalten als auch ähnlich wie ein WebPart Steuerelement zur Entwurfszeit und Laufzeit anzuzeigen. Wenn Sie die Seite in einem Browser laden, können Sie die Benutzeroberfläche auf der Seite verwenden, um die Möglichkeit zu veranschaulichen, die Werte der implementierten IWebPart Eigenschaften zur Laufzeit programmgesteuert zu ändern. Wenn Sie einige der Eigenschaftenwerte ändern, werden die Änderungen auf der Seite nicht offensichtlich, sind aber in der Seitenquelle (eigenschaft) sichtbar oder werden in den Statusdaten der Anwendung ( TitleIconImageUrl CatalogIconImageUrl die 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 abgeleitet werden, erhalten Sie eine Implementierung aller Eigenschaften in der IWebPart Schnittstelle, da die WebPart Basisklasse WebPart diese Schnittstelle implementiert.
Sie können vorhandene Benutzersteuerelemente, ASP.NET Steuerelemente oder benutzerdefinierte Serversteuerelemente verwenden, die nicht aus der Klasse als Teil einer Webparts-Anwendung erben, und sie können diese benutzeroberflächeorientierten Eigenschaften auch verwenden, die von der WebPart IWebPart Schnittstelle deklariert wurden. Wenn Sie vorhandene Serversteuerelemente in einer Zone platzieren, werden sie zur Laufzeit mit einem WebPartZoneBase GenericWebPart Objekt umgebrochen. Da die GenericWebPart Klasse von der WebPart Basisklasse erbt, ermöglicht es vorhandenen Serversteuerelementen, als wahre WebPart Steuerelemente zu handeln und sie den Eigenschaften der IWebPart Schnittstelle hinzufügt.
Wenn Sie Serversteuerelemente platzieren, die keine WebPart Steuerelemente in Zonen sind, können sie die IWebPart Eigenschaften zur Laufzeit verwenden, und Sie können auch Werte für diese Eigenschaften auf Serversteuerelementen im Markup der Seite (in Seitenpersistenzformat) deklarieren. Da diese Eigenschaften jedoch nur für die Serversteuerelemente zur Laufzeit verfügbar sind, erkennen Entwurfszeitcodierungsfeatures wie IntelliSense IWebPart keine Eigenschaften, die auf Serversteuerelementen deklariert werden. Deklarierte Eigenschaften für diese Steuerelemente funktionieren weiterhin beim Laden der Seite, aber Microsoft Visual Studio erkennt die Eigenschaften nicht als gültig zum Entwurfszeitpunkt. Wenn Sie die Eigenschaften zu vorhandenen Server- und Benutzersteuerelementen hinzufügen möchten, um die Entwurfszeit-Benutzeroberfläche zu verbessern, können Sie die IWebPart IWebPart Schnittstelle in einem Serversteuerelement implementieren.
Vielleicht ist der Hauptgrund zum Implementieren der IWebPart Schnittstelle für Steuerelemente, die die Verwendung von expando -Eigenschaften (benutzerdefinierte) nicht unterstützen. Expando-Eigenschaften sind Zeichenfolgen, die einer Klasse dynamisch als Eigenschaft hinzugefügt werden können, mithilfe der IAttributeAccessor Schnittstelle. 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, benutzerdefinierte Steuerelemente, die von ihnen abgeleitet werden, Webbenutzersteuerelemente und WebPart Steuerelemente die Verwendung von expando-Eigenschaften. Benutzerdefinierte Steuerelemente, die direkt von der Basisklasse Control erben, unterstützen jedoch keine Erweiterungseigenschaften. Wenn Sie also diese Steuerelemente innerhalb einer WebPartZoneDeklarieren, können Sie die allgemeinen IWebPart Eigenschaften der Steuerelemente, wie 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 Schnittstelle nicht implementieren, entweder auf benutzerdefinierten WebPart Steuerelementen oder Serversteuerelementen, da die Basisklasse WebPart bereits die IWebPart Schnittstelle implementiert. Benutzerdefinierte WebPart Steuerelemente und andere Serversteuerelemente, die in WebPartZoneBase Zonen platziert werden, können alle IWebPart Eigenschaften verwenden.
Der Hauptgrund für die Implementierung der Schnittstelle selbst, egal ob in einem benutzerdefinierten WebPart Steuerelement oder einem anderen Serversteuerelement, ist, wenn Sie die IWebPart Standardimplementierung ändern möchten. Sie können beispielsweise Standardwerte für einige der Eigenschaften bereitstellen. Ein weiterer Grund zum Implementieren der Schnittstelle in einem Benutzer- oder Serversteuerelement besteht darin, dass die Entwurfszeit der Arbeit mit diesen Eigenschaften auf dem 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. |