WebPartDescription Klass
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Innehåller information om en WebPart kontroll som du kan visa i en katalog med webbdelskontroller utan att behöva skapa en instans av kontrollen.
public ref class WebPartDescription
public class WebPartDescription
type WebPartDescription = class
Public Class WebPartDescription
- Arv
-
WebPartDescription
Exempel
I följande kodexempel visas programmatisk användning av WebPartDescription klassen. Normalt används den här typen främst av kontrolluppsättningen webbdelar, men det här kodexemplet visar helt enkelt grundläggande programmatisk användning av huvudbeskrivningsegenskaperna.
Kodexemplet har fyra delar:
En användarkontroll som gör det möjligt för användare att ändra visningslägen på en webbsida.
En anpassad WebPart kontroll.
En webbsida som ska vara värd för de andra kontrollerna.
En förklaring av hur kodexemplet fungerar.
Den första delen av kodexemplet är användarkontrollen. Källkoden för användarkontrollen kommer från ett annat ämne. Mer information om användarkontrollen finns i avsnittet Genomgång: Ändra visningslägen på en webbdelssida.
<%@ 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>
Den andra delen av kodexemplet är en anpassad WebPart kontroll. För att kodexemplet ska köras måste du kompilera den här källkoden. Du kan kompilera den explicit och placera den resulterande sammansättningen i webbplatsens bin-mapp eller den globala sammansättningscacheminnet. Du kan också placera källkoden i webbplatsens App_Code mapp, där den kompileras dynamiskt vid körning. I det här kodexemplet används metoden för dynamisk kompilering. En genomgång som visar hur du kompilerar finns i Genomgång: Utveckla och använda en anpassad webbserverkontroll.
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
Den tredje delen av kodexemplet är webbsidan. Nästan överst finns två Register direktiv: ett som registrerar användarkontrollen och det andra för att registrera den anpassade WebPart kontrollen vars källfil finns i App_Code-mappen på webbplatsen. Sidan innehåller ett <asp:catalogzone> element som i sin tur innehåller deklarativa referenser till två kontroller: den anpassade WebPart kontrollen med namnet TextDisplayWebPartoch en BulletedList webbserverkontroll som behandlas som en WebPart kontroll vid körning eftersom WebPartManager kontrollen omsluter den med ett GenericWebPart objekt. Observera att i koden för Button1_Click metoden hämtas tillgängliga WebPartDescription objekt för WebPart kontrollerna i katalogen med hjälp av GetAvailableWebPartDescriptions metoden och sedan skrivs beskrivningsinformationen ut på sidan.
<%@ 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>
När du har läst in sidan i en webbläsare använder du listrutan Visningsläge och väljer Katalog för att ändra sidan till katalogvisningsläge. I katalogen bör du se de två kontroller som är tillgängliga för att läggas till på sidan. Klicka på knappen List WebPartDescription Information och koden skriver ut värdena för alla tillgängliga WebPartDescription objekt på sidan. Detta visar att du kan hämta beskrivningsinformation för WebPart kontroller i en katalog utan att behöva skapa instanser av själva kontrollerna.
Kommentarer
När WebPart kontroller visas i en katalog med kontroller som användarna kan lägga till på en sida krävs viss grundläggande information om varje kontroll. Det är till exempel användbart att ha en rubrik för kontrollen och en beskrivning, så att användarna när de visar en katalog har tillräckligt med information för att avgöra om en kontroll ska läggas till på sidan. En katalog med WebPart kontroller kan dock innehålla många kontroller, och det kan påverka programmets prestanda om en instans av varje WebPart kontroll måste skapas för att extrahera informationen som ska visas i katalogen.
Klassen WebPartDescription finns så att det inte är nödvändigt att skapa en instans av en WebPart kontroll för att hämta information om kontrollen som visas i en katalog med kontroller. I kontrolluppsättningen Webbdelar används även ett WebPartDescription objekt tillsammans med de olika CatalogPart kontrollerna när en sida är i katalogvisningsläge.
Klassen WebPartDescription har två överlagringar av konstruktorn, en som tar en WebPart kontroll som en parameter när en instans är tillgänglig ( WebPartDescription konstruktorn) och en som tar flera strängar med information om kontrollen som parametrar ( WebPartDescription konstruktorn).
Klassen WebPartDescription har också flera egenskaper som är utformade för att innehålla beskrivningsinformation för WebPart kontroller. I följande tabell sammanfattas WebPartDescription egenskaperna och vilken egenskap var och en motsvarar i en WebPart kontroll.
| Beskrivningsegenskap | Relaterad egenskap för delkontroll |
|---|---|
| ID | ID |
| Title | Title |
| Description | Description |
| CatalogIconImageUrl | CatalogIconImageUrl |
Konstruktorer
| Name | Description |
|---|---|
| WebPartDescription(String, String, String, String) |
Initierar en ny instans av klassen med hjälp av flera strängar som innehåller beskrivningsinformation för en WebPart kontroll. |
| WebPartDescription(WebPart) |
Initierar en ny instans av klassen när en WebPart kontrollinstans är tillgänglig. |
Egenskaper
| Name | Description |
|---|---|
| CatalogIconImageUrl |
Hämtar en URL som innehåller sökvägen till en bild som används som en ikon för en WebPart kontroll. |
| Description |
Hämtar texten i en beskrivning för en WebPart kontroll. |
| ID |
Hämtar ID för en motsvarande WebPart kontroll. |
| Title |
Hämtar rubriktexten för en motsvarande WebPart kontroll. |
Metoder
| Name | Description |
|---|---|
| Equals(Object) |
Avgör om det angivna objektet är lika med det aktuella objektet. (Ärvd från Object) |
| GetHashCode() |
Fungerar som standard-hash-funktion. (Ärvd från Object) |
| GetType() |
Hämtar den aktuella instansen Type . (Ärvd från Object) |
| MemberwiseClone() |
Skapar en ytlig kopia av den aktuella Object. (Ärvd från Object) |
| ToString() |
Returnerar en sträng som representerar det aktuella objektet. (Ärvd från Object) |