IWebPart Interface
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Define as propriedades comuns da interface de utilizador (UI) usadas pelos controlos ASP.NET WebPart.
public interface class IWebPart
public interface IWebPart
type IWebPart = interface
Public Interface IWebPart
- Derivado
Exemplos
O exemplo de código seguinte demonstra como implementar a IWebPart interface num controlo de utilizador. Esta é uma implementação simples que mostra, minimamente, como implementar as propriedades.
A primeira parte do exemplo de código mostra o controlo do utilizador. O controlo do utilizador implementa todas as propriedades da IWebPart interface, mais duas propriedades públicas adicionais associadas aos controlos na interface do utilizador. As duas propriedades personalizadas utilizam cada uma o Personalizable atributo, que permite que os valores dessas propriedades sejam guardados entre as sessões do navegador. Note-se que na implementação da classe base WebPart , todas as propriedades da IWebPart interface também são implementadas como personalizáveis, embora não o sejam neste exemplo de código.
<%@ 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>
A segunda parte do exemplo de código mostra a página Web que aloja o controlo do utilizador. A página tem um WebPartZone controlo, dentro do qual o controlo do utilizador é referenciado. Note que vários IWebPart dos valores das propriedades da interface são definidos declarativamente na marcação para o controlo do utilizador, o que permite que se comporte e apareça de forma semelhante a um WebPart controlo em tempo de design e execução. Se carregar a página num navegador, pode usar a interface da página para demonstrar a capacidade de alterar programaticamente os valores das propriedades implementadas IWebPart em tempo de execução. Quando alteras alguns dos valores das propriedades, as alterações não são evidentes na página, mas são visíveis na fonte da página (a TitleIconImageUrl propriedade), ou são armazenadas nos dados de estado da aplicação (a CatalogIconImageUrl propriedade).
Importante
Este exemplo tem uma caixa de texto que aceita a entrada do utilizador, o que constitui uma potencial ameaça à segurança. Por defeito, as páginas Web do ASP.NET validam que a entrada do utilizador não inclui elementos de script ou HTML. Para mais informações, consulte Visão Geral dos Exploits de Scripts.
<%@ 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>
Observações
A IWebPart interface oferece várias propriedades orientadas para a interface de utilizador que melhoram a experiência do utilizador ao trabalhar com WebPart controlos. Quando crias controlos que derivam da classe base WebPart , obtém-se uma implementação de todas as propriedades da IWebPart interface, porque a WebPart classe base implementa essa interface.
Pode usar controlos de utilizador existentes, controlos ASP.NET ou controlos personalizados de servidor que não herdam da classe WebPart como parte de uma aplicação Web Parts, e também podem usar estas propriedades orientadas à interface de utilizador declaradas pela interface IWebPart. Se colocares os controlos existentes do servidor numa WebPartZoneBase zona, em tempo de execução eles estão envolvidos com um GenericWebPart objeto. Como a GenericWebPart classe herda da WebPart classe base, permite que os controlos existentes do servidor atuem como verdadeiros WebPart controlos e acrescenta-lhes as propriedades da IWebPart interface.
Se colocares os controlos do servidor que não WebPart são controlos em zonas, eles podem usar as IWebPart propriedades em tempo de execução, e também podes declarar valores para essas propriedades nos controlos do servidor na marcação da página (em formato de persistência da página). No entanto, como estas propriedades só estão disponíveis para os controlos do servidor em tempo de execução, funcionalidades de codificação em tempo de design, como o IntelliSense, não reconhecem IWebPart propriedades declaradas nos controlos do servidor. As propriedades declaradas nestes controlos continuam a funcionar quando carregas a página, mas Microsoft Visual Studio não reconhece as propriedades como válidas no momento do design. Se quiser adicionar as IWebPart propriedades aos controlos existentes do servidor e do utilizador para melhorar a experiência do utilizador em tempo de design, pode implementar a IWebPart interface num controlo do servidor.
Talvez a principal razão para implementar a IWebPart interface seja para controlos que não suportam o uso de propriedades expando (personalizadas). Propriedades expando são cadeias que podem ser adicionadas a uma classe dinamicamente como uma propriedade, através da IAttributeAccessor interface. Os controlos que implementam esta interface, incluindo a WebControl classe e os seus filhos, podem usar propriedades expando. Portanto, todos os controlos ASP.NET servidor, controlos personalizados que derivam deles, controlos de utilizador Web e controlos WebPart suportam o uso de propriedades expando. Mas os controlos personalizados que herdam diretamente da classe base Control não suportam propriedades expando. Assim, se declarar estes controlos dentro de um WebPartZone, não poderá declarar as propriedades comuns IWebPart nos controlos, propriedades como Title e Description. Se quiser usar estas propriedades com tais controlos, deve implementar a IWebPart interface.
Notas para Implementadores
Normalmente não é necessário implementar a IWebPart interface, nem em controlos personalizados WebPart nem em controlos de servidor, porque a classe base WebPart já implementa a interface. Controlos personalizados WebPart , e outros controlos de servidor colocados em WebPartZoneBase zonas, podem usar todas as IWebPart propriedades.
A principal razão para implementares a IWebPart interface tu próprio, seja num controlo personalizado WebPart ou noutro controlo de servidor, é se quiseres alterar a implementação padrão. Por exemplo, pode querer fornecer valores padrão para algumas das propriedades. Outra razão para implementar a interface num controlo de utilizador ou servidor é para que a experiência de trabalhar com estas propriedades no controlo seja melhorada.
Propriedades
| Name | Description |
|---|---|
| CatalogIconImageUrl |
Obtém ou define a URL para uma imagem que representa um WebPart controlo num catálogo de controlos. |
| Description |
Recebe ou define uma frase breve que resume o que um controlo faz, para uso em ToolTips e catálogos de WebPart controlos. |
| Subtitle |
Obtém uma cadeia que é concatenada com o Title valor da propriedade para formar um título completo para um WebPart controlo. |
| Title |
Recebe ou define o título de um WebPart controlo. |
| TitleIconImageUrl |
Obtém ou define a URL de uma imagem usada para representar um controlo de Web Parts na barra de título própria do controlo. |
| TitleUrl |
Obtém ou define uma URL para informação suplementar sobre um WebPart controlo. |