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 běž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á ukazuje minimální způsob implementace vlastností.
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 svázané s ovládacími prvky v uživatelském rozhraní. Tyto dvě vlastní vlastnosti používají Personalizable atribut, který umožňuje ukládání hodnot 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í implementovány jako personalizovatelné, 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 má WebPartZone ovládací prvek, na který se odkazuje na uživatelský ovládací prvek. Všimněte si, že několik IWebPart hodnot vlastností rozhraní se deklarativním způsobem nastavuje v kódu uživatelského ovládacího prvku, který umožňuje, aby se choval a vypadal podobně jako WebPart ovládací prvek v době návrhu a spuštění. Pokud stránku načtete v prohlížeči, můžete pomocí uživatelského rozhraní na stránce předvést možnost programově změnit hodnoty implementovaných IWebPart vlastností za běhu. Když změníte některé hodnoty vlastností, změny nejsou na stránce zřejmé, ale jsou viditelné ve zdroji stránky ( TitleIconImageUrl vlastnost) nebo jsou uloženy v datech o 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 vstup uživatele neobsahuje skripty ani elementy HTML. Další informace naleznete 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í práce s ovládacími WebPart prvky. Při vytváření ovládacích prvků odvozených 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é dě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í ovládací prvky serveru do WebPartZoneBase zóny, zabalí se za běhu objektem GenericWebPart . GenericWebPart Vzhledem k tomu, že třída dědí ze WebPart základní třídy, umožňuje stávají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 ovládací prvky serveru, které nejsou WebPart ovládacími prvky v zónách, můžou používat IWebPart vlastnosti za běhu a můžete také deklarovat hodnoty pro tyto vlastnosti na serverových ovládacích prvcích v kódu stránky (ve formátu trvalosti stránky). Vzhledem k tomu, že jsou tyto vlastnosti k dispozici pouze pro serverové ovládací prvky za běhu, funkce kódování v době návrhu, jako je IntelliSense, nerozpoznávají IWebPart vlastnosti deklarované na serverových ovládacích prvcích. Deklarované vlastnosti v těchto ovládacích prvcích stále fungují při načítání 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, můžete rozhraní implementovat IWebPart v ovládacím prvku serveru.
Možná hlavní důvod implementace IWebPart rozhraní je pro 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 prostřednictvím IAttributeAccessor rozhraní. Ovládací prvky, které implementují toto rozhraní, včetně WebControl třídy a jejích podřízených objektů, mohou používat vlastnosti expando. Proto všechny ASP.NET serverové ovládací prvky, vlastní ovládací prvky odvozené z nich, webové uživatelské ovládací prvky a WebPart ovládací prvky podporují použití vlastností rozbalení. Vlastní ovládací prvky, které dědí přímo ze základní Control třídy, však nepodporují vlastnosti expando. Pokud tedy deklarujete tyto ovládací prvky v rámci WebPartZone, nebudete moci 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
Obvykle není nutné implementovat IWebPart rozhraní, buď na 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ší ovládací prvky serveru umístěné v WebPartZoneBase zónách můžou používat všechny IWebPart vlastnosti.
Hlavním důvodem k implementaci 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 některých vlastností. Dalším důvodem implementace 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 na ovládacím prvku.
Vlastnosti
| Name | Description |
|---|---|
| CatalogIconImageUrl |
Získá nebo nastaví adresu URL na obrázek, který představuje WebPart ovládací prvek 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 WebPart ovládacího prvku. |
| Title |
Získá nebo nastaví název WebPart ovládacího prvku. |
| TitleIconImageUrl |
Získá nebo nastaví adresu URL na obrázek použitý k reprezentaci ovládacího prvku webové části v záhlaví ovládacího prvku. |
| TitleUrl |
Získá nebo nastaví adresu URL na doplňující informace o ovládacím WebPart prvku. |