WebPartDescription Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Предоставляет сведения об элементе управления WebPart, который можно отображать в каталоге элементов управления веб-частей, при этом отпадает необходимость создавать экземпляр элемента управления.
public ref class WebPartDescription
public class WebPartDescription
type WebPartDescription = class
Public Class WebPartDescription
- Наследование
-
WebPartDescription
Примеры
В следующем примере кода показано программное использование WebPartDescription класса . Как правило, этот тип используется в основном набором элементов управления веб-частей, но в этом примере кода просто показано базовое программное использование основных свойств описания.
Пример кода состоит из четырех частей:
Пользовательский элемент управления, позволяющий пользователям изменять режимы отображения на веб-странице.
Пользовательский WebPart элемент управления.
Веб-страница для размещения других элементов управления.
Объяснение того, как работает пример кода.
Первая часть примера кода — это пользовательский элемент управления. Исходный код для пользовательского элемента управления поступает из другого раздела. Дополнительные сведения о пользовательском элементе управления см. в разделе Пошаговое руководство. Изменение режимов отображения на странице веб-частей.
<%@ control language="C#" classname="DisplayModeMenuCS"%>
<script runat="server">
// Use a field to reference the current WebPartManager.
WebPartManager _manager;
void Page_Init(object sender, EventArgs e)
{
Page.InitComplete += new EventHandler(InitComplete);
}
void InitComplete(object sender, System.EventArgs e)
{
_manager = WebPartManager.GetCurrentWebPartManager(Page);
String browseModeName = WebPartManager.BrowseDisplayMode.Name;
// Fill the dropdown with the names of supported display modes.
foreach (WebPartDisplayMode mode in _manager.SupportedDisplayModes)
{
String modeName = mode.Name;
// Make sure a mode is enabled before adding it.
if (mode.IsEnabled(_manager))
{
ListItem item = new ListItem(modeName, modeName);
DisplayModeDropdown.Items.Add(item);
}
}
// If shared scope is allowed for this user, display the scope-switching
// UI and select the appropriate radio button for the current user scope.
if (_manager.Personalization.CanEnterSharedScope)
{
Panel2.Visible = true;
if (_manager.Personalization.Scope == PersonalizationScope.User)
RadioButton1.Checked = true;
else
RadioButton2.Checked = true;
}
}
// Change the page to the selected display mode.
void DisplayModeDropdown_SelectedIndexChanged(object sender, EventArgs e)
{
String selectedMode = DisplayModeDropdown.SelectedValue;
WebPartDisplayMode mode = _manager.SupportedDisplayModes[selectedMode];
if (mode != null)
_manager.DisplayMode = mode;
}
// Set the selected item equal to the current display mode.
void Page_PreRender(object sender, EventArgs e)
{
ListItemCollection items = DisplayModeDropdown.Items;
int selectedIndex =
items.IndexOf(items.FindByText(_manager.DisplayMode.Name));
DisplayModeDropdown.SelectedIndex = selectedIndex;
}
// Reset all of a user's personalization data for the page.
protected void LinkButton1_Click(object sender, EventArgs e)
{
_manager.Personalization.ResetPersonalizationState();
}
// If not in User personalization scope, toggle into it.
protected void RadioButton1_CheckedChanged(object sender, EventArgs e)
{
if (_manager.Personalization.Scope == PersonalizationScope.Shared)
_manager.Personalization.ToggleScope();
}
// If not in Shared scope, and if user is allowed, toggle the scope.
protected void RadioButton2_CheckedChanged(object sender, EventArgs e)
{
if (_manager.Personalization.CanEnterSharedScope &&
_manager.Personalization.Scope == PersonalizationScope.User)
_manager.Personalization.ToggleScope();
}
</script>
<div>
<asp:Panel ID="Panel1" runat="server"
Borderwidth="1"
Width="230"
BackColor="lightgray"
Font-Names="Verdana, Arial, Sans Serif" >
<asp:Label ID="Label1" runat="server"
Text=" Display Mode"
Font-Bold="true"
Font-Size="8"
Width="120"
AssociatedControlID="DisplayModeDropdown"/>
<div>
<asp:DropDownList ID="DisplayModeDropdown" runat="server"
AutoPostBack="true"
Width="120"
OnSelectedIndexChanged="DisplayModeDropdown_SelectedIndexChanged" />
<asp:LinkButton ID="LinkButton1" runat="server"
Text="Reset User State"
ToolTip="Reset the current user's personalization data for the page."
Font-Size="8"
OnClick="LinkButton1_Click" />
</div>
<asp:Panel ID="Panel2" runat="server"
GroupingText="Personalization Scope"
Font-Bold="true"
Font-Size="8"
Visible="false" >
<asp:RadioButton ID="RadioButton1" runat="server"
Text="User"
AutoPostBack="true"
GroupName="Scope" OnCheckedChanged="RadioButton1_CheckedChanged" />
<asp:RadioButton ID="RadioButton2" runat="server"
Text="Shared"
AutoPostBack="true"
GroupName="Scope"
OnCheckedChanged="RadioButton2_CheckedChanged" />
</asp:Panel>
</asp:Panel>
</div>
<%@ control language="vb" classname="DisplayModeMenuVB"%>
<script runat="server">
' Use a field to reference the current WebPartManager.
Dim _manager As WebPartManager
Sub Page_Init(ByVal sender As Object, ByVal e As EventArgs)
AddHandler Page.InitComplete, AddressOf InitComplete
End Sub
Sub InitComplete(ByVal sender As Object, ByVal e As System.EventArgs)
_manager = WebPartManager.GetCurrentWebPartManager(Page)
Dim browseModeName As String = WebPartManager.BrowseDisplayMode.Name
' Fill the dropdown with the names of supported display modes.
Dim mode As WebPartDisplayMode
For Each mode In _manager.SupportedDisplayModes
Dim modeName As String = mode.Name
' Make sure a mode is enabled before adding it.
If mode.IsEnabled(_manager) Then
Dim item As New ListItem(modeName, modeName)
DisplayModeDropdown.Items.Add(item)
End If
Next mode
' If shared scope is allowed for this user, display the scope-switching
' UI and select the appropriate radio button for the current user scope.
If _manager.Personalization.CanEnterSharedScope Then
Panel2.Visible = True
If _manager.Personalization.Scope = PersonalizationScope.User Then
RadioButton1.Checked = True
Else
RadioButton2.Checked = True
End If
End If
End Sub
' Change the page to the selected display mode.
Sub DisplayModeDropdown_SelectedIndexChanged(ByVal sender As Object, _
ByVal e As EventArgs)
Dim selectedMode As String = DisplayModeDropdown.SelectedValue
Dim mode As WebPartDisplayMode = _
_manager.SupportedDisplayModes(selectedMode)
If Not (mode Is Nothing) Then
_manager.DisplayMode = mode
End If
End Sub
' Set the selected item equal to the current display mode.
Sub Page_PreRender(ByVal sender As Object, ByVal e As EventArgs)
Dim items As ListItemCollection = DisplayModeDropdown.Items
Dim selectedIndex As Integer = _
items.IndexOf(items.FindByText(_manager.DisplayMode.Name))
DisplayModeDropdown.SelectedIndex = selectedIndex
End Sub
' Reset all of a user's personalization data for the page.
Protected Sub LinkButton1_Click(ByVal sender As Object, _
ByVal e As EventArgs)
_manager.Personalization.ResetPersonalizationState()
End Sub
' If not in User personalization scope, toggle into it.
Protected Sub RadioButton1_CheckedChanged(ByVal sender As Object, _
ByVal e As EventArgs)
If _manager.Personalization.Scope = PersonalizationScope.Shared Then
_manager.Personalization.ToggleScope()
End If
End Sub
' If not in Shared scope, and if user is allowed, toggle the scope.
Protected Sub RadioButton2_CheckedChanged(ByVal sender As Object, _
ByVal e As EventArgs)
If _manager.Personalization.CanEnterSharedScope AndAlso _
_manager.Personalization.Scope = PersonalizationScope.User Then
_manager.Personalization.ToggleScope()
End If
End Sub
</script>
<div>
<asp:Panel ID="Panel1" runat="server"
Borderwidth="1"
Width="230"
BackColor="lightgray"
Font-Names="Verdana, Arial, Sans Serif" >
<asp:Label ID="Label1" runat="server"
Text=" Display Mode"
Font-Bold="true"
Font-Size="8"
Width="120"
AssociatedControlID="DisplayModeDropdown"/>
<div>
<asp:DropDownList ID="DisplayModeDropdown" runat="server"
AutoPostBack="true"
Width="120"
OnSelectedIndexChanged="DisplayModeDropdown_SelectedIndexChanged" />
<asp:LinkButton ID="LinkButton1" runat="server"
Text="Reset User State"
ToolTip="Reset the current user's personalization data for the page."
Font-Size="8"
OnClick="LinkButton1_Click" />
</div>
<asp:Panel ID="Panel2" runat="server"
GroupingText="Personalization Scope"
Font-Bold="true"
Font-Size="8"
Visible="false" >
<asp:RadioButton ID="RadioButton1" runat="server"
Text="User"
AutoPostBack="true"
GroupName="Scope" OnCheckedChanged="RadioButton1_CheckedChanged" />
<asp:RadioButton ID="RadioButton2" runat="server"
Text="Shared"
AutoPostBack="true"
GroupName="Scope"
OnCheckedChanged="RadioButton2_CheckedChanged" />
</asp:Panel>
</asp:Panel>
</div>
Вторая часть примера кода — это пользовательский WebPart элемент управления. Для выполнения примера кода необходимо скомпилировать этот исходный код. Ее можно скомпилировать явным образом и поместить полученную сборку в папку Bin веб-сайта или глобальный кэш сборок. Кроме того, исходный код можно поместить в папку App_Code сайта, где он будет динамически компилироваться во время выполнения. В этом примере кода используется подход динамической компиляции. Пошаговое руководство, демонстрирующее компиляцию, см. в разделе Пошаговое руководство. Разработка и использование пользовательского серверного веб-элемента управления.
using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Security.Permissions;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
namespace Samples.AspNet.CS.Controls
{
[AspNetHostingPermission(SecurityAction.Demand,
Level = AspNetHostingPermissionLevel.Minimal)]
[AspNetHostingPermission(SecurityAction.InheritanceDemand,
Level = AspNetHostingPermissionLevel.Minimal)]
public class TextDisplayWebPart : WebPart
{
private String _contentText = null;
TextBox input;
Label DisplayContent;
Literal lineBreak;
[Personalizable(), WebBrowsable]
public String ContentText
{
get { return _contentText; }
set { _contentText = value; }
}
protected override void CreateChildControls()
{
Controls.Clear();
DisplayContent = new Label();
DisplayContent.BackColor = Color.LightBlue;
DisplayContent.Text = this.ContentText;
this.Controls.Add(DisplayContent);
lineBreak = new Literal();
lineBreak.Text = @"<br />";
Controls.Add(lineBreak);
input = new TextBox();
this.Controls.Add(input);
Button update = new Button();
update.Text = "Set Label Content";
update.Click += new EventHandler(this.submit_Click);
this.Controls.Add(update);
}
private void submit_Click(object sender, EventArgs e)
{
// Update the label string.
if (!string.IsNullOrEmpty(input.Text))
{
_contentText = input.Text + @"<br />";
input.Text = String.Empty;
DisplayContent.Text = this.ContentText;
}
}
}
}
Imports System.Collections
Imports System.ComponentModel
Imports System.Drawing
Imports System.Security.Permissions
Imports System.Web
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Web.UI.WebControls.WebParts
Namespace Samples.AspNet.VB.Controls
<AspNetHostingPermission(SecurityAction.Demand, _
Level:=AspNetHostingPermissionLevel.Minimal)> _
<AspNetHostingPermission(SecurityAction.InheritanceDemand, _
Level:=AspNetHostingPermissionLevel.Minimal)> _
Public Class TextDisplayWebPart
Inherits WebPart
Private _contentText As String = Nothing
Private _fontStyle As String = Nothing
Private input As TextBox
Private DisplayContent As Label
Private lineBreak As Literal
<Personalizable(), WebBrowsable()> _
Public Property ContentText() As String
Get
Return _contentText
End Get
Set(ByVal value As String)
_contentText = value
End Set
End Property
Protected Overrides Sub CreateChildControls()
Controls.Clear()
DisplayContent = New Label()
DisplayContent.BackColor = Color.LightBlue
DisplayContent.Text = Me.ContentText
Me.Controls.Add(DisplayContent)
lineBreak = New Literal()
lineBreak.Text = "<br />"
Controls.Add(lineBreak)
input = New TextBox()
Me.Controls.Add(input)
Dim update As New Button()
update.Text = "Set Label Content"
AddHandler update.Click, AddressOf Me.submit_Click
Me.Controls.Add(update)
End Sub
Private Sub submit_Click(ByVal sender As Object, _
ByVal e As EventArgs)
' Update the label string.
If input.Text <> String.Empty Then
_contentText = input.Text + "<br />"
input.Text = String.Empty
DisplayContent.Text = Me.ContentText
End If
End Sub
End Class
End Namespace
Третья часть примера кода — веб-страница. В верхней части находятся две Register
директивы: одна регистрирует пользовательский элемент управления, а другая — для регистрации пользовательского WebPart элемента управления, исходный файл которого находится в папке App_Code сайта. Страница содержит <asp:catalogzone>
элемент , который, в свою очередь, содержит декларативные ссылки на два элемента управления: пользовательский WebPart элемент управления с именем TextDisplayWebPart
и серверный BulletedList веб-элемент управления, который будет рассматриваться как элемент управления во время выполнения, так как WebPartWebPartManager элемент управления будет упаковывать его в GenericWebPart объект . Обратите внимание, что в коде Button1_Click
метода доступные WebPartDescription объекты для WebPart элементов управления в каталоге извлекаются с помощью GetAvailableWebPartDescriptions метода , а затем сведения об описании записываются на страницу.
<%@ Page Language="C#" %>
<%@ Register TagPrefix="uc1"
TagName="DisplayModeMenuCS"
Src="~/DisplayModeMenuCS.ascx" %>
<%@ Register TagPrefix="aspSample"
Namespace="Samples.AspNet.CS.Controls"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
// <snippet2>
protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text = String.Empty;
WebPartDescriptionCollection descriptions =
DeclarativeCatalogPart1.GetAvailableWebPartDescriptions();
foreach (WebPartDescription desc in descriptions)
{
Label1.Text += "ID: " + desc.ID + "<br />" +
"Title: " + desc.Title + "<br />" +
"Description: " + desc.Description + "<br />" +
"ImageUrl: " + desc.CatalogIconImageUrl + "<br />" +
"<hr />";
}
}
// </snippet2>
protected void Page_PreRender(object sender, EventArgs e)
{
if (mgr1.DisplayMode == WebPartManager.CatalogDisplayMode)
{
Button1.Visible = true;
Label1.Visible = true;
}
else
{
Button1.Visible = false;
Label1.Visible = false;
}
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<asp:WebPartManager ID="mgr1" runat="server">
</asp:WebPartManager>
<uc1:DisplayModeMenuCS ID="menu1" runat="server" />
<asp:WebPartZone ID="WebPartZone1" runat="server">
<ZoneTemplate>
<asp:Calendar ID="Calendar1" runat="server"></asp:Calendar>
</ZoneTemplate>
</asp:WebPartZone>
<asp:CatalogZone ID="CatalogZone1" runat="server">
<ZoneTemplate>
<asp:DeclarativeCatalogPart ID="DeclarativeCatalogPart1" runat="server">
<WebPartsTemplate>
<aspSample:TextDisplayWebPart ID="txtDisplayWebPart1" runat="server"
Title="Text Display"
Description="Displays entered text in a label control."
CatalogIconImageUrl="MyWebPartIcon.gif"
/>
<asp:BulletedList
ID="BulletedList1"
Runat="server"
DisplayMode="HyperLink"
Title="Favorite Links"
CatalogIconImageUrl="MyLinksIcon.gif"
Description="My Favorite Links">
<asp:ListItem Value="http://msdn.microsoft.com">
MSDN
</asp:ListItem>
<asp:ListItem Value="http://www.asp.net">
ASP.NET
</asp:ListItem>
<asp:ListItem Value="http://www.msn.com">
MSN
</asp:ListItem>
</asp:BulletedList>
</WebPartsTemplate>
</asp:DeclarativeCatalogPart>
</ZoneTemplate>
</asp:CatalogZone>
<hr />
<asp:Button ID="Button1" runat="server"
Text="List WebPartDescription Info" OnClick="Button1_Click" />
<br />
<asp:Label ID="Label1" runat="server" Text="" />
<div>
</div>
</form>
</body>
</html>
<%@ Page Language="vb" %>
<%@ Register TagPrefix="uc1"
TagName="DisplayModeMenuVB"
Src="~/DisplayModeMenuVB.ascx" %>
<%@ Register TagPrefix="aspSample"
Namespace="Samples.AspNet.VB.Controls"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
' <snippet2>
Protected Sub Button1_Click(ByVal sender As Object, _
ByVal e As System.EventArgs)
Label1.Text = String.Empty
Dim descriptions As WebPartDescriptionCollection = _
DeclarativeCatalogPart1.GetAvailableWebPartDescriptions()
Dim desc As WebPartDescription
For Each desc In descriptions
Label1.Text += "ID: " & desc.ID & "<br />" & _
"Title: " & desc.Title & "<br />" & _
"Description: " & desc.Description & "<br />" & _
"ImageUrl: " & desc.CatalogIconImageUrl & "<br />" & _
"<hr />"
Next
End Sub
' </snippet2>
Protected Sub Page_PreRender(ByVal sender As Object, _
ByVal e As System.EventArgs)
If mgr1.DisplayMode Is WebPartManager.CatalogDisplayMode Then
Button1.Visible = True
Label1.Visible = True
Else
Button1.Visible = False
Label1.Visible = False
End If
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<asp:WebPartManager ID="mgr1" runat="server">
</asp:WebPartManager>
<uc1:DisplayModeMenuVB ID="menu1" runat="server" />
<asp:WebPartZone ID="WebPartZone1" runat="server">
<ZoneTemplate>
<asp:Calendar ID="Calendar1" runat="server"></asp:Calendar>
</ZoneTemplate>
</asp:WebPartZone>
<asp:CatalogZone ID="CatalogZone1" runat="server">
<ZoneTemplate>
<asp:DeclarativeCatalogPart ID="DeclarativeCatalogPart1" runat="server">
<WebPartsTemplate>
<aspSample:TextDisplayWebPart ID="txtDisplayWebPart1" runat="server"
Title="Text Display"
Description="Displays entered text in a label control."
CatalogIconImageUrl="MyWebPartIcon.gif"
/>
<asp:BulletedList
ID="BulletedList1"
Runat="server"
DisplayMode="HyperLink"
Title="Favorite Links"
CatalogIconImageUrl="MyLinksIcon.gif"
Description="My Favorite Links">
<asp:ListItem Value="http://msdn.microsoft.com">
MSDN
</asp:ListItem>
<asp:ListItem Value="http://www.asp.net">
ASP.NET
</asp:ListItem>
<asp:ListItem Value="http://www.msn.com">
MSN
</asp:ListItem>
</asp:BulletedList>
</WebPartsTemplate>
</asp:DeclarativeCatalogPart>
</ZoneTemplate>
</asp:CatalogZone>
<hr />
<asp:Button ID="Button1" runat="server"
Text="List WebPartDescription Info" OnClick="Button1_Click" />
<br />
<asp:Label ID="Label1" runat="server" Text="" />
<div>
</div>
</form>
</body>
</html>
Загрузив страницу в браузере, используйте элемент управления раскрывающийся список Режим отображения и выберите Каталог , чтобы изменить страницу на режим отображения каталога. В каталоге должны появиться два элемента управления, которые можно добавить на страницу. Нажмите кнопку List WebPartDescription Information (Список сведений webPartDescription ), и код запишет значения всех доступных WebPartDescription объектов на страницу. Это показывает, что вы можете получить сведения об описании элементов WebPart управления в каталоге без необходимости создавать экземпляры самих элементов управления.
Комментарии
Если WebPart элементы управления отображаются в каталоге элементов управления, которые пользователи могут добавлять на страницу, требуются некоторые основные сведения о каждом элементе управления. Например, полезно иметь заголовок элемента управления и описание, чтобы при просмотре каталога у пользователей было достаточно информации, чтобы решить, следует ли добавить элемент управления на страницу. Однако каталог WebPart элементов управления может содержать множество элементов управления и может повлиять на производительность приложения, если для извлечения информации, отображаемой в каталоге, необходимо создать экземпляр каждого WebPart элемента управления.
Класс WebPartDescription существует таким образом, что нет необходимости создавать экземпляр WebPart элемента управления для получения сведений об элементе управления, отображаемом в каталоге элементов управления. В наборе элементов управления веб-частей объект также используется в сочетании с различными CatalogPart элементами управления, WebPartDescription когда страница находится в режиме отображения каталога.
Класс WebPartDescription имеет две перегрузки своего конструктора: одна принимает WebPart элемент управления в качестве параметра при наличии экземпляра ( WebPartDescription конструктор), а другая — несколько строк со сведениями об элементе управления в качестве параметров ( WebPartDescription конструктор).
Класс WebPartDescription также имеет несколько свойств, предназначенных для хранения сведений об описании элементов WebPart управления. В следующей таблице перечислены WebPartDescription свойства и свойства, соответствующие каждому из них в элементе WebPart управления.
Description, свойство | Свойство элемента управления связанной частью |
---|---|
ID | ID |
Title | Title |
Description | Description |
CatalogIconImageUrl | CatalogIconImageUrl |
Конструкторы
WebPartDescription(String, String, String, String) |
Инициализирует новый экземпляр класса, используя несколько строк с описанием элемента управления WebPart. |
WebPartDescription(WebPart) |
Инициализирует новый экземпляр класса при наличии доступного экземпляра элемента управления WebPart. |
Свойства
CatalogIconImageUrl |
Получает URL-адрес, содержащий путь к изображению, которое используется в качестве значка элемента управления WebPart. |
Description |
Получает текст описания элемента управления WebPart. |
ID |
Получает ИД соответствующего элемента управления WebPart. |
Title |
Получает текст заголовка соответствующего элемента управления WebPart. |
Методы
Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
GetHashCode() |
Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
GetType() |
Возвращает объект Type для текущего экземпляра. (Унаследовано от Object) |
MemberwiseClone() |
Создает неполную копию текущего объекта Object. (Унаследовано от Object) |
ToString() |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |