IWebPart Интерфейс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Определяет общие свойства пользовательского интерфейса, используемые элементами управления WebPart ASP.NET.
public interface class IWebPart
public interface IWebPart
type IWebPart = interface
Public Interface IWebPart
- Производный
Примеры
В следующем примере кода показано, как реализовать IWebPart интерфейс в пользовательском элементе управления. Это простая реализация, которая показывает минимальное применение свойств.
В первой части примера кода показан пользовательский элемент управления. Пользовательский элемент управления реализует все свойства интерфейса, а также два дополнительных открытых IWebPart свойства, привязанных к элементам управления в пользовательском интерфейсе. Эти два настраиваемых свойства используют Personalizable
атрибут, что позволяет сохранять значения в этих свойствах в сеансах браузера. Обратите внимание, что в реализации базового WebPart класса все свойства IWebPart интерфейса реализуются как персонализированные, хотя они не находятся в этом примере кода.
<%@ 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>
Во второй части примера кода показана веб-страница, на которую размещен пользовательский элемент управления. На странице есть WebPartZone элемент управления, на который ссылается пользовательский элемент управления. Обратите внимание, что несколько IWebPart значений свойств интерфейса задаются декларативно в разметке пользовательского элемента управления, что позволяет ему вести себя и отображаться как WebPart элемент управления во время разработки, так и во время выполнения. При загрузке страницы в браузере можно использовать пользовательский интерфейс на странице для демонстрации возможности программного изменения значений реализованных IWebPart свойств во время выполнения. При изменении некоторых значений свойств изменения не очевидны на странице, но отображаются в источнике страницы ( TitleIconImageUrl свойство) или хранятся в данных состояния приложения ( CatalogIconImageUrl свойство).
Важно!
В этом примере имеется текстовое поле, принимающее вводимые пользователем данные, что является потенциальной угрозой безопасности. По умолчанию данные, вводимые пользователем на веб-страницах ASP.NET, проверяются на наличие скриптов и HTML-элементов. Дополнительные сведения см. в разделе Общие сведения об использовании сценариев.
<%@ 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>
Комментарии
Интерфейс IWebPart предоставляет несколько свойств, ориентированных на пользовательский интерфейс, которые улучшают взаимодействие с элементами WebPart управления. При создании элементов управления, производных от базового WebPart класса, вы получаете реализацию всех свойств в интерфейсе IWebPart , так как WebPart базовый класс реализует этот интерфейс.
Вы можете использовать существующие пользовательские элементы управления, ASP.NET или пользовательские серверные элементы управления, которые не наследуются от WebPart класса как часть приложения веб-части, и они также могут использовать эти свойстваIWebPart, ориентированные на пользовательский интерфейс. Если вы размещаете существующие серверные элементы управления в WebPartZoneBase зоне, во время выполнения они упаковываются в GenericWebPart объект. GenericWebPart Поскольку класс наследует от WebPart базового класса, он позволяет существующим серверным элементам управления действовать как истинные WebPart элементы управления, и он добавляет к ним свойства IWebPart интерфейса.
Если серверные элементы управления не WebPart являются элементами управления в зонах, они могут использовать IWebPart свойства во время выполнения, а также объявлять значения этих свойств на серверных элементах управления в разметке страницы (в формате сохраняемости страницы). Однако, поскольку эти свойства доступны только серверным элементам управления во время выполнения, функции программирования во время разработки, такие как IntelliSense, не распознают IWebPart свойства, объявленные на серверных элементах управления. Объявленные свойства этих элементов управления по-прежнему работают при загрузке страницы, но Microsoft Visual Studio не распознает свойства как допустимые во время разработки. Если вы хотите добавить свойства в существующие IWebPart серверные и пользовательские элементы управления, чтобы улучшить взаимодействие с пользователем во время разработки, можно реализовать IWebPart интерфейс в серверном элементе управления.
Возможно, основная причина реализации IWebPart интерфейса заключается в элементах управления, которые не поддерживают использование свойств expando (custom). Свойства Expando — это строки, которые можно динамически добавлять в класс как свойство с IAttributeAccessor помощью интерфейса. Элементы управления, реализующие этот интерфейс, включая WebControl класс и его дочерние элементы, могут использовать свойства expando. Таким образом, все ASP.NET серверные элементы управления, пользовательские элементы управления, производные от них, веб-элементы управления и WebPart элементы управления поддерживают использование свойств expando. Но пользовательские элементы управления, наследуемые непосредственно от базового Control класса, не поддерживают свойства expando. Таким образом, если вы объявляете эти элементы управления в пределах WebPartZoneобъекта, вы не сможете объявлять общие IWebPart свойства элементов управления, такие как Title и Description. Если вы хотите использовать эти свойства с такими элементами IWebPart управления, необходимо реализовать интерфейс.
Примечания для тех, кто реализует этот метод
Обычно не требуется реализовывать IWebPart интерфейс в пользовательских WebPart элементах управления или серверных элементах управления, так как базовый WebPart класс уже реализует интерфейс. Пользовательские WebPart элементы управления и другие серверные элементы управления, размещенные в WebPartZoneBase зонах, могут использовать все IWebPart свойства.
Основная причина реализации IWebPart интерфейса самостоятельно, будь то в пользовательском WebPart элементе управления или другом серверном элементе управления, заключается в том, чтобы изменить реализацию по умолчанию. Например, может потребоваться указать значения по умолчанию для некоторых свойств. Другая причина реализации интерфейса в пользовательском или серверном элементе управления заключается в том, что взаимодействие во время разработки с этими свойствами элемента управления будет улучшено.
Свойства
CatalogIconImageUrl |
Получает или задает URL-адрес для изображения, представляющего элемент управления WebPart в каталоге элементов управления. |
Description |
Получает или задает краткий текст, описывающий функции элемента управления для использования в подсказке и в каталогах серверных элементов управления WebPart. |
Subtitle |
Возвращает строку, которая объединены со значением свойства Title для формирования полного заголовка для элемента управления WebPart. |
Title |
Получает или задает название элемента управления WebPart. |
TitleIconImageUrl |
Получает или задает URL-адрес изображения, которое используется для представления элемента управления веб-частей в собственном заголовке окна элемента управления. |
TitleUrl |
Получает или задает URL-адрес для дополнительных сведений об элементе управления WebPart. |