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.NETWebPart.
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 vázané na ovládací 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 obsahuje WebPartZone ovládací prvek, na který odkazuje uživatelský ovládací prvek. Všimněte si, že několik IWebPart hodnot vlastností rozhraní je deklarativní ve značkách uživatelského ovládacího prvku, což umožňuje chovat se a vypadat podobně jako WebPart ovládací prvek v době návrhu a běhu. 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 vlastnosti, změny nejsou na stránce zřejmé, ale jsou viditelné ve zdroji stránky ( TitleIconImageUrl vlastnost) nebo jsou uloženy ve stavových datech 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ých stránek ověřte, že vstup uživatele neobsahuje skript ani prvky 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í 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é nedědí z WebPart třídy jako součást aplikace Webové části a mohou také používat tyto vlastnosti orientované na uživatelské rozhraní deklarované rozhranímIWebPart. Pokud umístíte existující ovládací prvky serveru do WebPartZoneBase zóny, za běhu jsou zabaleny objektem GenericWebPart . Vzhledem k tomu, že GenericWebPart 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á je 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 těchto vlastností na ovládacích prvcích serveru 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 deklarované na ovládacích prvcích serveru. Deklarované vlastnosti těchto ovládacích prvků 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 ovládacích prvků serveru a uživatelů, abyste vylepšili uživatelské prostředí v době návrhu, můžete rozhraní implementovat IWebPart do ovládacího 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 položek, mohou používat vlastnosti expando. Proto všechny ovládací prvky serveru ASP.NET, vlastní ovládací prvky odvozené z nich, ovládací prvky webového uživatele 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, ale nepodporují vlastnosti expando. Pokud tedy tyto ovládací prvky deklarujete v rámci , WebPartZonenebudete 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 rozhraní implementovat IWebPart .
Poznámky pro implementátory
Obvykle není nutné implementovat IWebPart rozhraní, a to 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, jestli chcete změnit výchozí implementaci. Můžete například chtít zadat výchozí hodnoty pro některé vlastnosti. Dalším důvodem k implementaci rozhraní v ovládacím prvku uživatele nebo serveru je, aby se zlepšilo prostředí návrhu práce s těmito vlastnostmi na ovládacím prvku.
Vlastnosti
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 obrázku použitého k reprezentaci ovládacího prvku Webové části na vlastním záhlaví ovládacího prvku. |
TitleUrl |
Získá nebo nastaví adresu URL na doplňkové informace o ovládacím WebPart prvku. |