IWebPart Interface
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Define as propriedades comuns de interface do usuário usadas por controles WebPart do ASP.NET.
public interface class IWebPart
public interface IWebPart
type IWebPart = interface
Public Interface IWebPart
- Derivado
Exemplos
O exemplo de código a seguir demonstra como implementar a IWebPart interface em um controle de usuário. Essa é uma implementação simples que mostra minimamente como implementar as propriedades.
A primeira parte do exemplo de código mostra o controle de usuário. O controle de usuário implementa todas as propriedades da interface, além de IWebPart duas propriedades públicas adicionais vinculadas a controles na interface do usuário. Cada uma das duas propriedades personalizadas usa o Personalizable
atributo , que permite que os valores nessas propriedades sejam salvos em sessões do navegador. Observe 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 estejam 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 da Web que hospeda o controle de usuário. A página tem um WebPartZone controle no qual o controle de usuário é referenciado. Observe que vários dos valores de IWebPart propriedade da interface são definidos declarativamente na marcação para o controle de usuário, o que permite que ele se comporte e pareça semelhante a um WebPart controle em tempo de design e tempo de execução. Se você carregar a página em um navegador, poderá usar a interface do usuário na página para demonstrar a capacidade de alterar programaticamente os valores das propriedades implementadas IWebPart em tempo de execução. Quando você altera alguns dos valores de propriedade, as alterações não são evidentes na página, mas são visíveis na origem da página (a TitleIconImageUrl propriedade ) ou são armazenadas nos dados de estado do aplicativo (a CatalogIconImageUrl propriedade ).
Importante
Este exemplo tem uma caixa de texto que aceita a entrada do usuário, que é uma possível ameaça à segurança. Por padrão, ASP.NET páginas da Web validam que a entrada do usuário não inclui elementos html ou script. Para obter mais informações, consulte Visão geral de explorações de script.
<%@ 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>
Comentários
A IWebPart interface fornece várias propriedades orientadas à interface do usuário que aprimoram a experiência do usuário de trabalhar com WebPart controles. Ao criar controles que derivam da classe base WebPart , você obtém uma implementação de todas as propriedades na IWebPart interface, pois a WebPart classe base implementa essa interface.
Você pode usar controles de usuário existentes, controles ASP.NET ou controles de servidor personalizados que não herdam da WebPart classe como parte de um aplicativo de Web Parts e eles também podem usar essas propriedades orientadas à interface do IWebPart usuário declaradas pela interface. Se você colocar controles de servidor existentes em uma WebPartZoneBase zona, em tempo de execução eles serão encapsulados com um GenericWebPart objeto . Como a GenericWebPart classe herda da classe base, ela permite que os WebPart controles de servidor existentes atuem como controles verdadeiros WebPart e adiciona a eles as propriedades da IWebPart interface.
Se você colocar controles de servidor que não WebPart são controles em zonas, eles poderão usar as IWebPart propriedades em tempo de execução e você também poderá declarar valores para essas propriedades em controles de servidor na marcação da página (no formato de persistência de página). No entanto, como essas propriedades só estão disponíveis para os controles de servidor em tempo de execução, recursos de codificação em tempo de design, como o IntelliSense, não reconhecem IWebPart propriedades declaradas em controles de servidor. As propriedades declaradas nesses controles ainda funcionam quando você carrega a página, mas o Microsoft Visual Studio não reconhece as propriedades como válidas em tempo de design. Se você quiser adicionar as IWebPart propriedades aos controles de servidor e usuário existentes para aprimorar a experiência do usuário em tempo de design, poderá implementar a IWebPart interface em um controle de servidor.
Talvez o principal motivo para implementar a IWebPart interface seja para controles que não dão suporte ao uso de propriedades expando (personalizadas). As propriedades Expando são cadeias de caracteres que podem ser adicionadas a uma classe dinamicamente como uma propriedade, por meio da IAttributeAccessor interface . Controles que implementam essa interface, incluindo a WebControl classe e seus filhos, podem usar propriedades expando. Portanto, todos os controles de servidor ASP.NET, controles personalizados derivados deles, controles de usuário da Web e WebPart controles dão suporte ao uso de propriedades expando. Mas os controles personalizados que herdam diretamente da classe base Control não dão suporte a propriedades expando. Portanto, se você declarar esses controles dentro de um WebPartZone, não poderá declarar as propriedades comuns IWebPart nos controles, propriedades como Title e Description. Se você quiser usar essas propriedades com esses controles, deverá implementar a IWebPart interface .
Notas aos Implementadores
Normalmente, você não precisa implementar a IWebPart interface , seja em controles personalizados WebPart ou controles de servidor, porque a classe base WebPart já implementa a interface . Controles personalizados WebPart e outros controles de servidor que são colocados em WebPartZoneBase zonas podem usar todas as IWebPart propriedades.
O principal motivo para implementar a IWebPart interface por conta própria, seja em um controle personalizado WebPart ou em outro controle de servidor, é se você deseja alterar a implementação padrão. Por exemplo, talvez você queira fornecer valores padrão para algumas das propriedades. Outro motivo para implementar a interface em um controle de usuário ou servidor é para que a experiência de tempo de design de trabalhar com essas propriedades no controle seja aprimorada.
Propriedades
CatalogIconImageUrl |
Obtém ou define a URL para uma imagem que representa um controle WebPart em um catálogo de controles. |
Description |
Obtém ou define uma frase curta que resume o que um controle faz, para ser usada em dicas de ferramenta e catálogos de controles de WebPart. |
Subtitle |
Obtém uma cadeia de caracteres que é concatenada com o valor da propriedade Title para compor um título completo para um controle WebPart. |
Title |
Obtém ou define o título de um controle WebPart. |
TitleIconImageUrl |
Obtém ou define a URL para uma imagem usada para representar um controle de Web Parts na barra de título do próprio controle. |
TitleUrl |
Obtém ou define uma URL para informações complementares sobre um controle WebPart. |