IWebPart Rozhraní
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Definuje společné vlastnosti uživatelského rozhraní používané ovládacími prvky ASP.NET WebPart .
public interface class IWebPart
public interface IWebPart
type IWebPart = interface
Public Interface IWebPart
- Odvozené
Příklady
Následující příklad kódu ukazuje, jak implementovat IWebPart rozhraní v uživatelském ovládacím prvku. Jedná se o jednoduchou implementaci, která minimálně ukazuje, jak implementovat vlastnosti.
První část příkladu kódu ukazuje uživatelský ovládací prvek. Uživatelský ovládací prvek implementuje všechny vlastnosti IWebPart rozhraní a dvě další veřejné vlastnosti spojené s ovládacími prvky v uživatelském rozhraní. Každá z těchto dvou vlastních vlastností používá Personalizable
atribut, který umožňuje ukládat hodnoty v těchto vlastnostech napříč relacemi prohlížeče. Všimněte si, že v implementaci základní WebPart třídy jsou všechny vlastnosti IWebPart rozhraní také implementovány jako přizpůsobitelné, i když nejsou v tomto příkladu kódu.
<%@ 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>
Druhá část příkladu kódu ukazuje webovou stránku, která je hostitelem uživatelského ovládacího prvku. Stránka obsahuje WebPartZone ovládací prvek, ve kterém se odkazuje na uživatelský ovládací prvek. Všimněte si, že několik IWebPart hodnot vlastností rozhraní je nastaveno deklarativně ve značkách pro uživatelský ovládací prvek, což umožňuje, aby se chovat a vypadat podobně jako ovládací prvek v době návrhu WebPart a v době běhu. Pokud stránku načtete v prohlížeči, můžete pomocí uživatelského rozhraní na stránce demonstrovat schopnost programově měnit hodnoty implementovaných IWebPart vlastností za běhu. Když změníte některé hodnoty vlastností, změny nejsou patrné na stránce, ale jsou viditelné ve zdroji stránky ( TitleIconImageUrl vlastnost) nebo jsou uloženy v datech stavu aplikace ( CatalogIconImageUrl vlastnost).
Důležité
Tento příklad obsahuje textové pole, které přijímá vstup uživatele, což je potenciální bezpečnostní hrozba. Ve výchozím nastavení ASP.NET webové stránky ověřují, že uživatelský vstup neobsahuje skript nebo elementy HTML. Další informace najdete v tématu Přehled zneužití skriptů.
<%@ 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>
Poznámky
Rozhraní IWebPart poskytuje několik vlastností orientovaných na uživatelské rozhraní, které zlepšují uživatelské prostředí při práci s ovládacími WebPart prvky. Při vytváření ovládacích prvků, které jsou odvozeny ze základní WebPart třídy, získáte implementaci všech vlastností v IWebPart rozhraní, protože WebPart základní třída implementuje toto rozhraní.
Můžete použít existující uživatelské ovládací prvky, ASP.NET ovládací prvky nebo vlastní serverové ovládací prvky, které nedědí z WebPart třídy jako součást aplikace webových částí, a mohou také použít tyto vlastnosti orientované na uživatelské rozhraní deklarované rozhraním IWebPart . Pokud umístíte existující serverové WebPartZoneBase ovládací prvky do zóny, jsou za běhu zabalené s objektem GenericWebPart . Vzhledem k tomu, že GenericWebPart třída dědí ze WebPart základní třídy, umožňuje existující serverové ovládací prvky fungovat jako skutečné WebPart ovládací prvky a přidává do nich vlastnosti IWebPart rozhraní.
Pokud umístíte serverové ovládací prvky, které nejsou WebPart ovládacími prvky, do zón, můžou používat IWebPart vlastnosti za běhu a můžete také deklarovat hodnoty těchto vlastností na serverových ovládacích prvcích ve značkách stránky (ve formátu trvalosti stránky). Vzhledem k tomu, že tyto vlastnosti jsou k dispozici pouze ovládacím prvkům serveru za běhu, funkce kódování v době návrhu, jako je IntelliSense, nerozpoznávají IWebPart vlastnosti, které jsou deklarovány na serverových ovládacích prvcích. Deklarované vlastnosti u těchto ovládacích prvků stále fungují i při načtení stránky, ale microsoft Visual Studio nerozpozná vlastnosti jako platné v době návrhu. Pokud chcete přidat IWebPart vlastnosti do existujících serverových a uživatelských ovládacích prvků, abyste vylepšili uživatelské prostředí v době návrhu IWebPart , můžete rozhraní implementovat v ovládacím prvku serveru.
Možná je hlavním důvodem pro implementaci IWebPart rozhraní ovládací prvky, které nepodporují použití expando (vlastních) vlastností. Expando vlastnosti jsou řetězce, které lze přidat do třídy dynamicky jako vlastnost pomocí IAttributeAccessor rozhraní. Ovládací prvky, které implementují toto rozhraní, včetně WebControl třídy a jejích podřízených položek, mohou používat vlastnosti expando. Proto všechny ASP.NET serverové ovládací prvky, vlastní ovládací prvky, které z nich jsou odvozeny, webové uživatelské ovládací prvky a WebPart ovládací prvky podporují použití vlastností expando. Vlastní ovládací prvky, které dědí přímo ze základní Control třídy, ale nepodporují vlastnosti expando. Pokud tedy tyto ovládací prvky deklarujete v rámci WebPartZone, nebudete moct deklarovat společné IWebPart vlastnosti ovládacích prvků, například Title a Description. Pokud chcete tyto vlastnosti použít s těmito ovládacími prvky, musíte implementovat IWebPart rozhraní.
Poznámky pro implementátory
Za normálních okolností není nutné implementovat IWebPart rozhraní, a to buď ve vlastních WebPart ovládacích prvcích nebo serverových ovládacích prvcích, protože základní WebPart třída již implementuje rozhraní. Vlastní WebPart ovládací prvky a další serverové ovládací prvky umístěné v WebPartZoneBase zónách můžou používat všechny IWebPart vlastnosti.
Hlavním důvodem, proč implementovat IWebPart rozhraní sami, ať už ve vlastním WebPart ovládacím prvku nebo jiném ovládacím prvku serveru, je, pokud chcete změnit výchozí implementaci. Můžete například chtít zadat výchozí hodnoty pro některé vlastnosti. Dalším důvodem pro implementaci rozhraní v uživatelském nebo serverovém ovládacím prvku je, aby se zlepšila doba návrhu práce s těmito vlastnostmi ovládacího prvku.
Vlastnosti
CatalogIconImageUrl |
Získá nebo nastaví adresu URL na obrázek, který představuje ovládací prvek WebPart v katalogu ovládacích prvků. |
Description |
Získá nebo nastaví stručnou frázi, která shrnuje, co ovládací prvek dělá, pro použití v popisech a katalogech ovládacích WebPart prvků. |
Subtitle |
Získá řetězec, který je zřetězen s Title hodnotou vlastnosti vytvořit úplný název ovládacího prvku WebPart . |
Title |
Získá nebo nastaví název ovládacího prvku WebPart . |
TitleIconImageUrl |
Získá nebo nastaví adresu URL na obrázek, který se používá k reprezentaci webové části ovládací prvek v záhlaví vlastního ovládacího prvku. |
TitleUrl |
Získá nebo nastaví adresu URL na doplňující informace o ovládacím WebPart prvku. |