IWebPart Интерфейс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Определяет общие свойства пользовательского интерфейса, используемые элементами управления ASP.NET WebPart .
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 управления. |