IWebPart Interfejs
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Definiuje typowe właściwości interfejsu użytkownika używane przez kontrolki ASP.NET WebPart .
public interface class IWebPart
public interface IWebPart
type IWebPart = interface
Public Interface IWebPart
- Pochodne
Przykłady
W poniższym przykładzie kodu pokazano, jak zaimplementować IWebPart interfejs w kontrolce użytkownika. Jest to prosta implementacja, która pokazuje minimalnie sposób implementowania właściwości.
Pierwsza część przykładu kodu przedstawia kontrolkę użytkownika. Kontrolka użytkownika implementuje wszystkie właściwości interfejsu IWebPart oraz dwie dodatkowe właściwości publiczne powiązane z kontrolkami w interfejsie użytkownika. Dwie właściwości niestandardowe używają atrybutu Personalizable
, który umożliwia zapisanie wartości w tych właściwościach w sesjach przeglądarki. Należy pamiętać, że w implementacji klasy bazowej WebPart wszystkie właściwości interfejsu IWebPart są implementowane jako personalizowalne, choć nie są one w tym przykładzie kodu.
<%@ 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>
Druga część przykładu kodu przedstawia stronę sieci Web, która hostuje kontrolkę użytkownika. Strona ma kontrolkę WebPartZone , w ramach której odwołuje się kontrolka użytkownika. Zwróć uwagę, że kilka IWebPart wartości właściwości interfejsu jest ustawianych deklaratywnie w znacznikach dla kontrolki użytkownika, co umożliwia jej zachowanie i wygląd podobny do WebPart kontrolki w czasie projektowania i czasie wykonywania. Jeśli załadujesz stronę w przeglądarce, możesz użyć interfejsu użytkownika na stronie, aby zademonstrować możliwość programowego zmieniania wartości zaimplementowanych IWebPart właściwości w czasie wykonywania. Po zmianie niektórych wartości właściwości zmiany nie są widoczne na stronie, ale są widoczne w źródle strony ( TitleIconImageUrl właściwości) lub są przechowywane w danych stanu aplikacji ( CatalogIconImageUrl właściwość).
Ważne
W tym przykładzie znajduje się pole tekstowe, które akceptuje dane wejściowe użytkownika, co jest potencjalnym zagrożeniem bezpieczeństwa. Domyślnie ASP.NET strony sieci Web weryfikują, czy dane wejściowe użytkownika nie zawierają skryptów ani elementów HTML. Aby uzyskać więcej informacji, zobacz Omówienie luk w zabezpieczeniach skryptów.
<%@ 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>
Uwagi
Interfejs IWebPart udostępnia kilka właściwości zorientowanych na interfejs użytkownika, które zwiększają środowisko pracy użytkownika z kontrolkami WebPart . Podczas tworzenia kontrolek pochodzących z klasy bazowej uzyskuje się implementację wszystkich właściwości interfejsuIWebPart, ponieważ WebPart klasa bazowa WebPart implementuje ten interfejs.
Możesz użyć istniejących kontrolek użytkownika, kontrolek ASP.NET lub niestandardowych kontrolek serwera, które nie dziedziczą z WebPart klasy jako części aplikacji składników Web Part, a także mogą używać tych właściwości zorientowanych na interfejs użytkownika zadeklarowanych przez IWebPart interfejs. Jeśli istniejące kontrolki serwera są umieszczane w WebPartZoneBase strefie, w czasie wykonywania są one opakowane obiektem GenericWebPart . GenericWebPart Ponieważ klasa dziedziczy z klasy bazowejWebPart, umożliwia istniejącym kontrolkom serwera działanie jako prawdziwe WebPart kontrolki i dodaje do nich właściwości interfejsuIWebPart.
Jeśli umieszczasz kontrolki serwera, które nie WebPart są kontrolkami w strefach, mogą używać IWebPart właściwości w czasie wykonywania, a także zadeklarować wartości dla tych właściwości w kontrolkach serwera w adiustacji strony (w formacie trwałości strony). Jednak ponieważ te właściwości są dostępne tylko dla kontrolek serwera w czasie wykonywania, funkcje kodowania w czasie projektowania, takie jak IntelliSense, nie rozpoznają IWebPart właściwości zadeklarowanych w kontrolkach serwera. Zadeklarowane właściwości tych kontrolek nadal działają podczas ładowania strony, ale program Microsoft Visual Studio nie rozpoznaje właściwości jako prawidłowych w czasie projektowania. Jeśli chcesz dodać IWebPart właściwości do istniejących kontrolek serwera i użytkownika w celu ulepszenia środowiska użytkownika w czasie projektowania, możesz zaimplementować IWebPart interfejs w kontrolce serwera.
Być może głównym powodem implementacji interfejsu jest kontrolki IWebPart , które nie obsługują użycia właściwości expando (niestandardowych). Właściwości Expando to ciągi, które można dodać do klasy dynamicznie jako właściwość, za pomocą interfejsu IAttributeAccessor . Kontrolki implementujące ten interfejs, w tym klasę WebControl i jej elementy podrzędne, mogą używać właściwości expando. W związku z tym wszystkie kontrolki serwera ASP.NET, kontrolki niestandardowe pochodzące z nich, kontrolki użytkownika sieci Web i WebPart kontrolki obsługują korzystanie z właściwości expando. Jednak kontrolki niestandardowe dziedziczone bezpośrednio z klasy bazowej Control nie obsługują właściwości expando. W związku z tym, jeśli zadeklarujesz te kontrolki w ramach elementu WebPartZone, nie będzie można zadeklarować wspólnych IWebPart właściwości kontrolek, właściwości, takich jak Title i Description. Jeśli chcesz użyć tych właściwości z takimi kontrolkami, musisz zaimplementować IWebPart interfejs.
Uwagi dotyczące implementowania
Zwykle nie trzeba implementować interfejsu IWebPart , zarówno na kontrolkach niestandardowych WebPart , jak i na kontrolkach serwera, ponieważ klasa bazowa WebPart już implementuje interfejs. Kontrolki niestandardowe WebPart i inne kontrolki serwera umieszczone w WebPartZoneBase strefach mogą używać wszystkich IWebPart właściwości.
Głównym powodem samodzielnego zaimplementowania interfejsu IWebPart , zarówno w niestandardowej WebPart kontrolce, jak i innej kontrolce serwera, jest zmiana domyślnej implementacji. Na przykład możesz podać wartości domyślne dla niektórych właściwości. Innym powodem implementacji interfejsu w kontrolce użytkownika lub serwera jest to, że środowisko projektowania pracy z tymi właściwościami w kontrolce zostanie ulepszone.
Właściwości
CatalogIconImageUrl |
Pobiera lub ustawia adres URL na obraz, który reprezentuje kontrolkę WebPart w katalogu kontrolek. |
Description |
Pobiera lub ustawia krótką frazę, która podsumowuje działanie kontrolki do użycia w etykietkach narzędzi i katalogach WebPart kontrolek. |
Subtitle |
Pobiera ciąg połączony z wartością Title właściwości, aby utworzyć pełny tytuł kontrolki WebPart . |
Title |
Pobiera lub ustawia tytuł kontrolki WebPart . |
TitleIconImageUrl |
Pobiera lub ustawia adres URL obrazu używanego do reprezentowania kontrolki składników Web Part na pasku tytułu kontrolki. |
TitleUrl |
Pobiera lub ustawia adres URL na dodatkowe informacje o kontrolce WebPart . |