ImportCatalogPart 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
public ref class ImportCatalogPart sealed : System::Web::UI::WebControls::WebParts::CatalogPart
public sealed class ImportCatalogPart : System.Web.UI.WebControls.WebParts.CatalogPart
type ImportCatalogPart = class
inherit CatalogPart
Public NotInheritable Class ImportCatalogPart
Inherits CatalogPart
- 继承
示例
下面的代码示例演示如何以声明方式和编程方式在网页上使用 ImportCatalogPart 控件。 该示例包含四个部分:
一个用户控件,可用于更改 Web 部件页上的显示模式。
包含 CatalogZone 控件和控件的 ImportCatalogPart 网页。
包含两个自定义 WebPart 控件的源代码文件。
说明在浏览器中加载页面时示例的工作原理。
此代码示例的第一部分是用户控件,使用户能够更改网页上的显示模式。 应将以下源代码放入文件中,并将其命名为 Displaymodemenucs.ascx 或 Displaymodemenuvb.ascx (,具体取决于) 使用的语言。 有关显示模式的详细信息和此控件中的源代码说明,请参阅 演练:更改 Web 部件页上的显示模式。
<%@ 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"/>
<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" />
<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"/>
<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" />
<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>
代码示例的第二部分是网页。 页面顶部有两个 register
指令,一个用于用户控件,一个用于包含两个自定义 WebPart 控件的已编译组件。 请注意,页面具有对 控件的 ImportCatalogPart 声明性引用,嵌套在声明性元素的适当层次结构中。 另请注意,多个属性值以声明方式在 元素上 <asp:importcatalogpart>
分配。 此外, Button1_Click
方法还会更新 控件上的 ImportCatalogPart 许多属性值。
在页面的 WebPartZone 控件中,声明了两个自定义 WebPart 控件。 控件 <aspSample:userinfowebpart>
上有一个 exportmode="all"
属性。 需要此属性才能使用户能够导出控件的说明文件,然后,希望使用说明文件导入控件的其他用户可以导入该文件。
注意
若要使 Web 部件应用程序的用户能够导出控件的说明文件WebPart,还必须通过在 Web.config 文件中) 元素的子<system.web>
元素 (添加enableExport="true"
属性来<webParts>
启用 Web 应用程序中的导出功能。 导出在默认情况下处于禁用状态,因此,如果尚未为应用程序启用导出,请编辑 Web.config 文件并立即执行此操作。
<%@ 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">
// <snippet3>
protected void Button1_Click(object sender, EventArgs e)
{
ImportCatalogPart1.Title = "Import Server Controls";
ImportCatalogPart1.BrowseHelpText = "Enter the path to a "
+ "description file.";
ImportCatalogPart1.UploadButtonText = "Upload Description";
ImportCatalogPart1.UploadHelpText = "Upload a description file.";
ImportCatalogPart1.ImportedPartLabelText = "Imported Controls";
ImportCatalogPart1.PartImportErrorLabelText = "An error occurred "
+ "during the import process.";
}
// </snippet3>
protected void Page_Load(object sender, EventArgs e)
{
Button1.Visible = false;
}
protected void ImportCatalogPart1_PreRender(object sender,
EventArgs e)
{
Button1.Visible = true;
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>
ImportCatalogPart Control
</title>
</head>
<body>
<form id="form1" runat="server">
<asp:webpartmanager id="WebPartManager1" runat="server" />
<uc1:DisplayModeMenuCS ID="DisplayModeMenu1" runat="server" />
<asp:webpartzone id="zone1" runat="server" >
<PartTitleStyle BorderWidth="1"
Font-Names="Verdana, Arial"
Font-Size="110%"
BackColor="LightBlue" />
<zonetemplate>
<aspSample:TextDisplayWebPart
runat="server"
id="TextDisplayWebPart1"
title = "Text Display WebPart" />
<aspsample:userinfowebpart id="userinfo1" runat="server"
Title="User Information" exportmode="all" />
</zonetemplate>
</asp:webpartzone>
<asp:EditorZone ID="EditorZone1" runat="server">
<ZoneTemplate>
<asp:PropertyGridEditorPart ID="PropertyGridEditorPart1"
runat="server" />
</ZoneTemplate>
</asp:EditorZone>
<asp:CatalogZone ID="CatalogZone1" runat="server">
<ZoneTemplate>
<asp:ImportCatalogPart ID="ImportCatalogPart1"
runat="server"
Title="My ImportCatalogPart"
OnPreRender="ImportCatalogPart1_PreRender"
BrowseHelpText="Type a path or browse to find a control's
description file."
UploadButtonText="Upload Description File"
UploadHelpText="Click the button to upload the description
file."
ImportedPartLabelText="My User Information WebPart"
PartImportErrorLabelText="An error occurred while trying
to import a description file." />
</ZoneTemplate>
</asp:CatalogZone>
<hr />
<asp:Button ID="Button1" runat="server"
Text="Update ImportCatalogPart"
OnClick="Button1_Click" />
</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">
' <snippet3>
Protected Sub Button1_Click(ByVal sender As Object, _
ByVal e As EventArgs)
ImportCatalogPart1.Title = "Import Server Controls"
ImportCatalogPart1.BrowseHelpText = "Enter the path to a " _
& "description file."
ImportCatalogPart1.UploadButtonText = "Upload Description"
ImportCatalogPart1.UploadHelpText = "Upload a description file."
ImportCatalogPart1.ImportedPartLabelText = "Imported Controls"
ImportCatalogPart1.PartImportErrorLabelText = "An error occurred " _
& "during the import process."
End Sub
' </snippet3>
Protected Sub Page_Load(ByVal sender As Object, _
ByVal e As EventArgs)
Button1.Visible = false
End Sub
Protected Sub ImportCatalogPart1_PreRender(ByVal sender As Object, _
ByVal e As EventArgs)
Button1.Visible = true
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>
ImportCatalogPart Control
</title>
</head>
<body>
<form id="form1" runat="server">
<asp:webpartmanager id="WebPartManager1" runat="server" />
<uc1:DisplayModeMenuVB ID="DisplayModeMenu1" runat="server" />
<asp:webpartzone id="zone1" runat="server" >
<PartTitleStyle BorderWidth="1"
Font-Names="Verdana, Arial"
Font-Size="110%"
BackColor="LightBlue" />
<zonetemplate>
<aspSample:TextDisplayWebPart
runat="server"
id="TextDisplayWebPart1"
title = "Text Display WebPart" />
<aspsample:userinfowebpart id="userinfo1" runat="server"
Title="User Information" exportmode="all" />
</zonetemplate>
</asp:webpartzone>
<asp:EditorZone ID="EditorZone1" runat="server">
<ZoneTemplate>
<asp:PropertyGridEditorPart ID="PropertyGridEditorPart1"
runat="server" />
</ZoneTemplate>
</asp:EditorZone>
<asp:CatalogZone ID="CatalogZone1" runat="server">
<ZoneTemplate>
<asp:ImportCatalogPart ID="ImportCatalogPart1"
runat="server"
Title="My ImportCatalogPart"
OnPreRender="ImportCatalogPart1_PreRender"
BrowseHelpText="Type a path or browse to find a control's
description file."
UploadButtonText="Upload Description File"
UploadHelpText="Click the button to upload the description
file."
ImportedPartLabelText="My User Information WebPart"
PartImportErrorLabelText="An error occurred while trying
to import a description file." />
</ZoneTemplate>
</asp:CatalogZone>
<hr />
<asp:Button ID="Button1" runat="server"
Text="Update ImportCatalogPart"
OnClick="Button1_Click" />
</form>
</body>
</html>
代码示例的第三部分是两 WebPart 个控件的源代码。 请注意,这些控件上的某些属性使用 WebBrowsable
属性进行标记。 这使控件能够 PropertyGridEditorPart 动态生成用户界面 (UI) ,以便在控件处于编辑模式时编辑这些属性。 属性还标有属性 WebDisplayName
,以指定在编辑 UI 中每个控件旁边显示的标签文本。 若要运行代码示例,必须编译此源代码。 可以显式编译它,并将生成的程序集放入网站的 Bin 文件夹或全局程序集缓存中。 或者,可以将源代码放入站点的“App_Code”文件夹中,并在运行时动态编译源代码。 此代码示例使用动态编译。 有关演示这两种编译方法的演练,请参阅 演练:开发和使用自定义 Web 服务器控件。
名为 TextDisplayWebPart
的自定义控件在 <aspSample:TextDisplayWebPart>
包含 元素的网页上引用。 另一个名为 UserInfoWebPart
的控件最初也在网页上声明,但稍后将删除它以演示导入控件说明文件的能力。
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 UserInfoWebPart : WebPart
{
HttpServerUtility server = HttpContext.Current.Server;
private String _userNickName = "Add a nickname.";
private String _userPetName = "Add a pet name.";
private DateTime _userSpecialDate = DateTime.Now;
private Boolean _userIsCurrent = true;
private JobTypeName _userJobType = JobTypeName.Unselected;
public enum JobTypeName
{
Unselected = 0,
Support = 1,
Service = 2,
Professional = 3,
Technical = 4,
Manager = 5,
Executive = 6
}
Label NickNameLabel;
Label PetNickNameLabel;
Label SpecialDateLabel;
CheckBox IsCurrentCheckBox;
Label JobTypeLabel;
// Add the Personalizable and WebBrowsable attributes to the
// public properties, so that users can save property values
// and edit them with a PropertyGridEditorPart control.
[Personalizable(), WebBrowsable, WebDisplayName("Nickname")]
public String NickName
{
get
{
object o = ViewState["NickName"];
if (o != null)
return (string)o;
else
return _userNickName;
}
set { _userNickName = server.HtmlEncode(value); }
}
[Personalizable(), WebBrowsable, WebDisplayName("Pet Name")]
public String PetName
{
get
{
object o = ViewState["PetName"];
if (o != null)
return (string)o;
else
return _userPetName;
}
set { _userPetName = server.HtmlEncode(value); }
}
[Personalizable(), WebBrowsable(), WebDisplayName("Special Day")]
public DateTime SpecialDay
{
get
{
object o = ViewState["SpecialDay"];
if (o != null)
return (DateTime)o;
else
return _userSpecialDate;
}
set { _userSpecialDate = value; }
}
[Personalizable(), WebBrowsable(), WebDisplayName("Job Type")]
public JobTypeName UserJobType
{
get
{
object o = ViewState["UserJobType"];
if (o != null)
return (JobTypeName)o;
else
return _userJobType;
}
set { _userJobType = (JobTypeName)value; }
}
[Personalizable(), WebBrowsable(), WebDisplayName("Is Current")]
public Boolean IsCurrent
{
get
{
object o = ViewState["IsCurrent"];
if (o != null)
return (Boolean)o;
else
return _userIsCurrent;
}
set { _userIsCurrent = value; }
}
protected override void CreateChildControls()
{
Controls.Clear();
NickNameLabel = new Label();
NickNameLabel.Text = this.NickName;
SetControlAttributes(NickNameLabel);
PetNickNameLabel = new Label();
PetNickNameLabel.Text = this.PetName;
SetControlAttributes(PetNickNameLabel);
SpecialDateLabel = new Label();
SpecialDateLabel.Text = this.SpecialDay.ToShortDateString();
SetControlAttributes(SpecialDateLabel);
IsCurrentCheckBox = new CheckBox();
IsCurrentCheckBox.Checked = this.IsCurrent;
SetControlAttributes(IsCurrentCheckBox);
JobTypeLabel = new Label();
JobTypeLabel.Text = this.UserJobType.ToString();
SetControlAttributes(JobTypeLabel);
ChildControlsCreated = true;
}
private void SetControlAttributes(WebControl ctl)
{
ctl.BackColor = Color.White;
ctl.BorderWidth = 1;
ctl.Width = 200;
this.Controls.Add(ctl);
}
protected override void RenderContents(HtmlTextWriter writer)
{
writer.Write("Nickname:");
writer.WriteBreak();
NickNameLabel.RenderControl(writer);
writer.WriteBreak();
writer.Write("Pet Name:");
writer.WriteBreak();
PetNickNameLabel.RenderControl(writer);
writer.WriteBreak();
writer.Write("Special Date:");
writer.WriteBreak();
SpecialDateLabel.RenderControl(writer);
writer.WriteBreak();
writer.Write("Job Type:");
writer.WriteBreak();
JobTypeLabel.RenderControl(writer);
writer.WriteBreak();
writer.Write("Current:");
writer.WriteBreak();
IsCurrentCheckBox.RenderControl(writer);
}
}
[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 = Context.Server.HtmlEncode(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 UserInfoWebPart
Inherits WebPart
Private server As HttpServerUtility = HttpContext.Current.Server
Private _userNickName As String = "Add a nickname."
Private _userPetName As String = "Add a pet name."
Private _userSpecialDate As DateTime = DateTime.Now
Private _userIsCurrent As [Boolean] = True
Private _userJobType As JobTypeName = JobTypeName.Unselected
Public Enum JobTypeName
Unselected = 0
Support = 1
Service = 2
Professional = 3
Technical = 4
Manager = 5
Executive = 6
End Enum
Private NickNameLabel As Label
Private PetNickNameLabel As Label
Private SpecialDateLabel As Label
Private IsCurrentCheckBox As CheckBox
Private JobTypeLabel As Label
' Add the Personalizable and WebBrowsable attributes to the
' public properties, so that users can save property values
' and edit them with a PropertyGridEditorPart control.
<Personalizable(), WebBrowsable(), WebDisplayName("Nickname")> _
Public Property NickName() As String
Get
Dim o As Object = ViewState("NickName")
If Not (o Is Nothing) Then
Return CStr(o)
Else
Return _userNickName
End If
End Get
Set(ByVal value As String)
_userNickName = server.HtmlEncode(value)
End Set
End Property
<Personalizable(), WebBrowsable(), WebDisplayName("Pet Name")> _
Public Property PetName() As String
Get
Dim o As Object = ViewState("PetName")
If Not (o Is Nothing) Then
Return CStr(o)
Else
Return _userPetName
End If
End Get
Set(ByVal value As String)
_userPetName = server.HtmlEncode(value)
End Set
End Property
<Personalizable(), WebBrowsable(), WebDisplayName("Special Day")> _
Public Property SpecialDay() As DateTime
Get
Dim o As Object = ViewState("SpecialDay")
If Not (o Is Nothing) Then
Return CType(o, DateTime)
Else
Return _userSpecialDate
End If
End Get
Set(ByVal value As DateTime)
_userSpecialDate = value
End Set
End Property
<Personalizable(), WebBrowsable(), WebDisplayName("Job Type")> _
Public Property UserJobType() As JobTypeName
Get
Dim o As Object = ViewState("UserJobType")
If Not (o Is Nothing) Then
Return CType(o, JobTypeName)
Else
Return _userJobType
End If
End Get
Set(ByVal value As JobTypeName)
_userJobType = CType(value, JobTypeName)
End Set
End Property
<Personalizable(), WebBrowsable(), WebDisplayName("Is Current")> _
Public Property IsCurrent() As [Boolean]
Get
Dim o As Object = ViewState("IsCurrent")
If Not (o Is Nothing) Then
Return CType(o, [Boolean])
Else
Return _userIsCurrent
End If
End Get
Set(ByVal value As [Boolean])
_userIsCurrent = value
End Set
End Property
Protected Overrides Sub CreateChildControls()
Controls.Clear()
NickNameLabel = New Label()
NickNameLabel.Text = Me.NickName
SetControlAttributes(NickNameLabel)
PetNickNameLabel = New Label()
PetNickNameLabel.Text = Me.PetName
SetControlAttributes(PetNickNameLabel)
SpecialDateLabel = New Label()
SpecialDateLabel.Text = Me.SpecialDay.ToShortDateString()
SetControlAttributes(SpecialDateLabel)
IsCurrentCheckBox = New CheckBox()
IsCurrentCheckBox.Checked = Me.IsCurrent
SetControlAttributes(IsCurrentCheckBox)
JobTypeLabel = New Label()
JobTypeLabel.Text = Me.UserJobType.ToString()
SetControlAttributes(JobTypeLabel)
ChildControlsCreated = True
End Sub
Private Sub SetControlAttributes(ByVal ctl As WebControl)
ctl.BackColor = Color.White
ctl.BorderWidth = 1
ctl.Width = 200
Me.Controls.Add(ctl)
End Sub
Protected Overrides Sub RenderContents(ByVal writer As HtmlTextWriter)
writer.Write("Nickname:")
writer.WriteBreak()
NickNameLabel.RenderControl(writer)
writer.WriteBreak()
writer.Write("Pet Name:")
writer.WriteBreak()
PetNickNameLabel.RenderControl(writer)
writer.WriteBreak()
writer.Write("Special Date:")
writer.WriteBreak()
SpecialDateLabel.RenderControl(writer)
writer.WriteBreak()
writer.Write("Job Type:")
writer.WriteBreak()
JobTypeLabel.RenderControl(writer)
writer.WriteBreak()
writer.Write("Current:")
writer.WriteBreak()
IsCurrentCheckBox.RenderControl(writer)
End Sub
End Class
<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 String.IsNullOrEmpty(input.Text) = False Then
_contentText = Context.Server.HtmlEncode(input.Text) + "<br />"
input.Text = String.Empty
DisplayContent.Text = Me.ContentText
End If
End Sub
End Class
End Namespace
现在运行代码示例。 在浏览器中加载网页。 第一步是编辑 UserInfoWebPart
控件。 使用 “显示模式 ”下拉列表控件并选择“ 编辑” ,将页面切换到编辑模式。 单击控件的 UserInfoWebPart
谓词菜单, (标题栏中的向下箭头) ,然后单击“ 编辑”。 出现编辑 UI 时,控件下方 UserInfoWebPart
会显示几个编辑控件,可用于编辑其字段值。 编辑某些字段,单击“ 确定”,然后使用 “显示模式 ”下拉列表将页面返回到浏览模式。
第二步是导出 。控件的 UserInfoWebPart
WebPart 说明文件。 单击由标题栏中) 向下箭头表示的自定义控件 (谓词菜单,然后单击“ 导出”。 按照说明保存 。控件的 WebPart 说明文件。 现在关闭网页,并在编辑器中编辑页面源。
<aspSample:userinfowebpart>
删除控件声明元素,然后保存并关闭该文件。 (执行此步骤以模拟尚未拥有控件 UserInfoWebPart
的用户,以便可以将控件导入页面) 。
在浏览器中再次加载网页。 不应显示控件 UserInfoWebPart
,因为已删除它。 使用 “显示模式 ”下拉列表控件并选择“ 目录 ”,将页面切换到目录模式。 在 控件中 ImportCatalogPart ,单击“ 浏览 ”按钮,然后浏览到 。创建的 WebPart 文件,然后单击“ 上传 ”按钮。 对 控件的引用应显示,旁边应有一个复选框。 选中该复选框,然后单击“ 添加 ”将控件添加到页面。
在页面的此视图中,单击页面底部附近的 “更新 ImportCatalogPart ”按钮,查看以编程方式更新控件上 ImportCatalogPart 多个属性值的效果。 单击按钮后,观察 UI 中各种属性的更改情况。
最后,单击“ 关闭 ”退出目录模式,并将页面返回到浏览模式。 控件 UserInfoWebPart
现在应显示在页面中,其中包含之前导出控件时具有的值。
注解
控件ImportCatalogPart使用户能够导入描述用户要添加到WebPartZoneBase区域的控件或服务器控件上的WebPart设置的说明文件。
用户导入说明文件后,文件中引用的 WebPart 控件将显示在控件内 ImportCatalogPart ,用户可以将控件添加到页面。
说明文件与控件本身不同。 它是以 结尾的 XML 文件。WebPart 扩展和 包含描述控件状态的名称/值对(主要是属性值)。 说明文件是根据指定的 XML 格式创建的,如主题 Web 部件控件说明文件中所述。
对于说明文件引用的控件,它可以编译为程序集,也可以是 .ascx 文件中定义的用户控件。 在任一情况下,导入的描述文件中引用的控件都必须存在于承载尝试导入控件的页面的 Web 服务器上。 说明文件引用包含控件的控件名称和程序集 (或文件) ,说明文件包含影响控件的属性值、外观和行为的设置。
控件 ImportCatalogPart 使用户能够共享控件上的设置。 复杂控件可以具有许多属性和设置。 例如,在大型公司内的典型 Intranet 站点中,自定义 WebPart 控件可能包含许多属性,这些属性包含特定于用户环境的值,例如其数据库连接、部门信息等。 控件还可能包含影响其外观的多个属性。 一个用户可以对特定网站上的控件进行个性化设置并使其正常工作,导出控件的说明文件,然后与其他用户共享说明文件,其他用户可以导入该文件,以便将完全配置的控件添加到允许他们进行个性化设置的其他 Intranet 站点。 只要承载其网站的 Web 服务器上存在包含控件的已编译程序集或用户控件文件,用户就可以将该控件添加到其他网站。
用户将描述文件导入 (,因此其关联的服务器控件) 网页的机制是 ImportCatalogPart 控件,页面开发人员必须将其添加到网页。 当用户将页面切换到目录显示模式时,将显示控件 ImportCatalogPart ,用户可以使用此控件浏览到 。WebPart 说明文件对应于要导入的服务器控件。 按照控件提供的 ImportCatalogPart UI 和说明,用户能够将所需的服务器控件添加到网页中,其外观和属性完全按照导入的描述文件中的指定进行配置。
WebPart在导入控件的说明文件之前,用户必须先创建 (导出) 基于现有WebPart控件的文件。 如果满足以下条件,则可以为控件导出说明文件:
控件具有用
Personalizable
属性标记的属性。Web.config 文件的
enableExport
属性值在 元素上<webParts>
设置为true
。开发人员将 控件上的 属性的值 ExportMode 设置为默认值以外的 None值,该值禁止导出。 ExportMode如果属性值设置为 NonSensitiveData,则当用户导出说明文件时,不会导出包含IsSensitive具有
Personalizable
特性的参数的任何属性。 这使控制开发人员能够防止在某些情况下导出敏感数据(如连接字符串)。
用户可以通过单击控件谓词菜单中出现的导出谓词并按照说明保存 来导出已启用导出的控件。控件的 WebPart 说明文件。 然后,其他用户可以导入此文件来配置自己的控件实例。
类 ImportCatalogPart 包含多个属性。 属性 BrowseHelpText 包含文本,其中包含用户浏览以查找说明文件时的说明。 属性 ImportedPartLabelText 包含的文本在控件中 ImportCatalogPart 显示为导入的控件时用作标签。 包含 PartImportErrorLabelText 导入控件说明时出错时显示的文本。 如果开发人员未分配标题,则 Title 属性将替代基属性,以便为控件 ImportCatalogPart 分配默认标题。 UploadButtonText属性包含用户单击以上传说明文件的按钮的文本,属性UploadHelpText包含上传过程的说明。
类 ImportCatalogPart 还包含几个唯一的方法。 方法 GetAvailableWebPartDescriptions 检索 WebPartDescription 目录中每个 WebPart 控件的 对象,使 ImportCatalogPart 控件能够显示有关每个服务器控件的信息,而无需创建它的实例。 方法 GetWebPart 根据传递给 方法的说明获取特定 WebPart 控件的实例。
使用 ImportCatalogPart 控件存在一些固有风险。 一个示例是通过用于导入的说明文件将恶意数据导入 Web 应用程序的可能性。 如果有人将恶意脚本代码作为字符串属性的值放在说明文件中,则在用户导入说明文件并将引用的服务器控件添加到网页时,可能会执行该脚本。 为了最大程度地降低导入包含恶意数据的描述文件的风险,具有字符串类型属性的服务器控件应始终对属性数据进行编码。 另一个风险是通过说明文件导入类型 (请参阅 Web 部件控件说明文件) 。 恶意用户可能会提交请求,以将许多程序集加载到 AppDomain中,从而导致占用过多的内存。
若要避免与导入相关的风险,可以通过不使用导入功能或 ImportCatalogPart 控件来完全禁用该功能。 或者,可以限制用户有权访问控件的内容。 可以使用角色管理以编程方式执行此操作, (请参阅 使用角色) 管理授权 。 例如,加载页面时,可以测试用户是否处于特定角色(例如管理员角色)。 如果用户是该角色,则可以以编程方式将 ImportCatalogPart 控件添加到该用户的页面。 还可以使用声明性方法限制可以使用 控件 ImportCatalogPart 的用户集。 在包含目录的网页中,可以放置两 CatalogZone 个控件:一个用于可以导入的用户,一个用于不能导入的用户。 可以导入的用户的区域将包含 控件 ImportCatalogPart 。 区域本身可以放置在控件内 LoginView ,这样就可以将区域中控件的使用限制为仅那些经过身份验证的用户或指定的角色。
构造函数
ImportCatalogPart() |
初始化 ImportCatalogPart 类的新实例。 |
属性
AccessKey |
获取或设置使您得以快速导航到 Web 服务器控件的访问键。 (继承自 WebControl) |
Adapter |
获取控件的浏览器特定适配器。 (继承自 Control) |
AppRelativeTemplateSourceDirectory |
获取或设置包含该控件的 Page 或 UserControl 对象的应用程序相对虚拟目录。 (继承自 Control) |
Attributes |
获取与控件的特性不对应的任意特性(只用于呈现)的集合。 (继承自 WebControl) |
BackColor |
获取或设置 Web 服务器控件的背景色。 (继承自 WebControl) |
BackImageUrl |
获取或设置面板控件背景图像的 URL。 (继承自 Panel) |
BindingContainer |
获取包含该控件的数据绑定的控件。 (继承自 Control) |
BorderColor |
获取或设置 Web 控件的边框颜色。 (继承自 WebControl) |
BorderStyle |
获取或设置 Web 服务器控件的边框样式。 (继承自 WebControl) |
BorderWidth |
获取或设置 Web 服务器控件的边框宽度。 (继承自 WebControl) |
BrowseHelpText |
获取或设置一条文本消息,该消息指示用户浏览至一个说明文件的位置。 |
ChildControlsCreated |
获取一个值,该值指示是否已创建服务器控件的子控件。 (继承自 Control) |
ChromeState |
获取或设置部件控件是处于最小化状态还是正常状态。 (继承自 Part) |
ChromeType |
获取或设置构成 Web 部件控件的框架的边框类型。 (继承自 Part) |
ClientID |
获取由 ASP.NET 生成的 HTML 标记的控件 ID。 (继承自 Control) |
ClientIDMode |
获取或设置用于生成 ClientID 属性值的算法。 (继承自 Control) |
ClientIDSeparator |
获取一个字符值,该值表示 ClientID 属性中使用的分隔符字符。 (继承自 Control) |
Context |
为当前 Web 请求获取与服务器控件关联的 HttpContext 对象。 (继承自 Control) |
Controls |
获取 ControlCollection 对象,该对象包含用户界面层次结构中指定服务器控件的子控件。 (继承自 Part) |
ControlStyle |
获取 Web 服务器控件的样式。 此属性主要由控件开发人员使用。 (继承自 WebControl) |
ControlStyleCreated |
获取一个值,该值指示是否已为 Style 属性创建了 ControlStyle 对象。 此属性主要由控件开发人员使用。 (继承自 WebControl) |
CssClass |
获取或设置由 Web 服务器控件在客户端呈现的级联样式表 (CSS) 类。 (继承自 WebControl) |
DataItemContainer |
如果命名容器实现 IDataItemContainer,则获取对命名容器的引用。 (继承自 Control) |
DataKeysContainer |
如果命名容器实现 IDataKeysControl,则获取对命名容器的引用。 (继承自 Control) |
DefaultButton |
获取或设置用户界面 (UI) 上视为默认按钮的按钮,该按钮用于在呈现包含它的窗体时接收焦点。 此属性不应在网页开发人员代码中调用。 |
Description |
获取或设置一条短语,该短语在部件控件的工具提示和目录中用来概述该部件控件的作用。 (继承自 Part) |
DesignMode |
获取一个值,该值指示是否正在使用设计图面上的一个控件。 (继承自 Control) |
Direction |
获取或设置在 Panel 控件中显示包含文本的控件的方向。 (继承自 Panel) |
DisplayTitle |
获取一个字符串,其中包含 CatalogPart 控件的实际当前标题。 (继承自 CatalogPart) |
Enabled |
获取或设置一个值,该值指示是否启用 Web 服务器控件。 (继承自 WebControl) |
EnableTheming |
获取或设置一个值,该值指示主题是否应用于该控件。 (继承自 WebControl) |
EnableViewState |
获取或设置一个值,该值指示服务器控件是否向发出请求的客户端保持自己的视图状态以及它所包含的任何子控件的视图状态。 (继承自 Control) |
Events |
获取控件的事件处理程序委托列表。 此属性为只读。 (继承自 Control) |
Font |
获取与 Web 服务器控件关联的字体属性。 (继承自 WebControl) |
ForeColor |
获取或设置 Web 服务器控件的前景色(通常是文本颜色)。 (继承自 WebControl) |
GroupingText |
获取或设置面板控件中包含的控件组的标题。 (继承自 Panel) |
HasAttributes |
获取一个值,该值指示控件是否具有特性集。 (继承自 WebControl) |
HasChildViewState |
获取一个值,该值指示当前服务器控件的子控件是否具有任何已保存的视图状态设置。 (继承自 Control) |
Height |
获取或设置 Web 服务器控件的高度。 (继承自 WebControl) |
HorizontalAlign |
获取或设置面板内容的水平对齐方式。 (继承自 Panel) |
ID |
获取或设置分配给服务器控件的编程标识符。 (继承自 Control) |
IdSeparator |
获取用于分隔控件标识符的字符。 (继承自 Control) |
ImportedPartLabelText |
获取或设置当用户导入一个说明文件后显示的文本,该文本说明或描述导入控件目录中的相应导入控件。 |
IsChildControlStateCleared |
获取一个值,该值指示该控件中包含的控件是否具有控件状态。 (继承自 Control) |
IsEnabled |
获取一个值,该值指示是否启用控件。 (继承自 WebControl) |
IsTrackingViewState |
获取一个值,用于指示服务器控件是否会将更改保存到其视图状态中。 (继承自 Control) |
IsViewStateEnabled |
获取一个值,该值指示是否为该控件启用了视图状态。 (继承自 Control) |
LoadViewStateByID |
获取一个值,该值指示控件是否通过 ID 而不是索引参与加载其视图状态。 (继承自 Control) |
NamingContainer |
获取对服务器控件的命名容器的引用,此引用创建唯一的命名空间,以区分具有相同 ID 属性值的服务器控件。 (继承自 Control) |
Page |
获取对包含服务器控件的 Page 实例的引用。 (继承自 Control) |
Parent |
获取对页 UI 层次结构中服务器控件的父控件的引用。 (继承自 Control) |
PartImportErrorLabelText |
获取或设置一条错误消息,该信息在导入过程中发生错误时显示。 |
RenderingCompatibility |
获取一个值,该值指定呈现的 HTML 将与之兼容的 ASP.NET 版本。 (继承自 Control) |
ScrollBars |
获取或设置 Panel 控件中滚动条的可见性和位置。 (继承自 Panel) |
Site |
获取容器信息,该容器在呈现于设计图面上时承载当前控件。 (继承自 Control) |
SkinID |
获取或设置要应用于控件的外观。 (继承自 WebControl) |
Style |
获取将在 Web 服务器控件的外部标记上呈现为样式特性的文本特性的集合。 (继承自 WebControl) |
SupportsDisabledAttribute |
获取一个值,该值指示在控件的 |
TabIndex |
获取或设置 Web 服务器控件的选项卡索引。 (继承自 WebControl) |
TagKey |
获取对应于此 Web 服务器控件的 HtmlTextWriterTag 值。 此属性主要由控件开发人员使用。 (继承自 WebControl) |
TagName |
获取控件标记的名称。 此属性主要由控件开发人员使用。 (继承自 WebControl) |
TemplateControl |
获取或设置对包含该控件的模板的引用。 (继承自 Control) |
TemplateSourceDirectory |
获取包含当前服务器控件的 Page 或 UserControl 的虚拟目录。 (继承自 Control) |
Title |
获取或设置在 ImportCatalogPart 控件的标题栏中显示的标题。 |
ToolTip |
获取或设置当鼠标指针悬停在 Web 服务器控件上时显示的文本。 (继承自 WebControl) |
UniqueID |
获取服务器控件的唯一的、以分层形式限定的标识符。 (继承自 Control) |
UploadButtonText |
获取或设置 Button 控件的文本,该控件初始化说明文件的上载。 |
UploadHelpText |
获取或设置一条文本消息,该消息告诉用户如何上载说明文件。 |
ValidateRequestMode |
获取或设置指示控件是否检查来自浏览器的客户端输入是否具有潜在危险值的值。 (继承自 Control) |
ViewState |
获取状态信息的字典,这些信息使您可以在同一页的多个请求间保存和还原服务器控件的视图状态。 (继承自 Control) |
ViewStateIgnoresCase |
获取一个值,该值指示 StateBag 对象是否不区分大小写。 (继承自 Control) |
ViewStateMode |
获取或设置此控件的视图状态模式。 (继承自 Control) |
Visible |
获取或设置一个值,该值指示服务器控件是否作为 UI 呈现在页上。 (继承自 Control) |
WebPartManager |
获取对 WebPartManager 类的当前实例的引用。 (继承自 CatalogPart) |
Width |
获取或设置 Web 服务器控件的宽度。 (继承自 WebControl) |
Wrap |
获取或设置一个指示面板中的内容是否换行的值。 (继承自 Panel) |
Zone |
获取对包含 CatalogZoneBase 控件的 CatalogPart 区域的引用。 (继承自 CatalogPart) |
方法
事件
DataBinding |
当服务器控件绑定到数据源时发生。 (继承自 Control) |
Disposed |
当从内存释放服务器控件时发生,这是请求 ASP.NET 页时服务器控件生存期的最后阶段。 (继承自 Control) |
Init |
当服务器控件初始化时发生;初始化是控件生存期的第一步。 (继承自 Control) |
Load |
当服务器控件加载到 Page 对象中时发生。 (继承自 Control) |
PreRender |
在加载 Control 对象之后、呈现之前发生。 (继承自 Control) |
Unload |
当服务器控件从内存中卸载时发生。 (继承自 Control) |
显式接口实现
扩展方法
FindDataSourceControl(Control) |
返回与指定控件的数据控件关联的数据源。 |
FindFieldTemplate(Control, String) |
返回指定控件的命名容器中指定列的字段模板。 |
FindMetaTable(Control) |
返回包含数据控件的元表对象。 |
GetDefaultValues(INamingContainer) |
为指定数据控件获取默认值的集合。 |
GetMetaTable(INamingContainer) |
为指定数据控件获取表元数据。 |
SetMetaTable(INamingContainer, MetaTable) |
为指定数据控件设置表元数据。 |
SetMetaTable(INamingContainer, MetaTable, IDictionary<String,Object>) |
为指定数据控件设置表元数据和默认值映射。 |
SetMetaTable(INamingContainer, MetaTable, Object) |
为指定数据控件设置表元数据和默认值映射。 |
TryGetMetaTable(INamingContainer, MetaTable) |
确定表元数据是否可用。 |
EnableDynamicData(INamingContainer, Type) |
为指定数据控件启用动态数据行为。 |
EnableDynamicData(INamingContainer, Type, IDictionary<String,Object>) |
为指定数据控件启用动态数据行为。 |
EnableDynamicData(INamingContainer, Type, Object) |
为指定数据控件启用动态数据行为。 |