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 (пользовательских). Свойства 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. |