ImportCatalogPart.GetAvailableWebPartDescriptions メソッド
アセンブリ: System.Web (system.web.dll 内)

Dim instance As ImportCatalogPart Dim returnValue As WebPartDescriptionCollection returnValue = instance.GetAvailableWebPartDescriptions
カタログ内の各コントロールの WebPartDescription を含む WebPartDescriptionCollection。

GetAvailableWebPartDescriptions メソッドは、CatalogPart クラスで宣言される抽象基本メソッドの実装を提供します。GetAvailableWebPartDescriptions メソッドは、カタログ内の各コントロール説明情報を返します。このメソッドは複数のコントロールがある場合でも機能しますが、ImportCatalogPart コントロールの場合は、カタログに含めることができるのは一度に 1 つのサーバー コントロールだけです。
WebPartDescription オブジェクトは、WebPart コントロールについての必須情報を含むオブジェクトです。この情報には、その ID、そのコントロールへのオブジェクト参照、および Part クラスから継承される Title や Description などのいくつかの重要なプロパティの値があります。
GetAvailableWebPartDescriptions メソッドによってパフォーマンスが向上します。カタログを作成するときは、それに格納する各コントロールについて、タイトル、説明、アイコン (存在する場合)、および ID などの情報が必要です。これらの情報を各コントロールのインスタンスを作成して収集しなくても、カタログを作成する CatalogZoneBase ゾーンが、GetAvailableWebPartDescriptions メソッドを呼び出し、その呼び出しが、コントロールのインスタンスではなくコントロールの説明情報だけを返します。

Web ページで GetAvailableWebPartDescriptions メソッドを使用する方法を次のコード例に示します。この例は、4 つの部分で構成されます。
-
CatalogZone コントロールと ImportCatalogPart コントロールを含む Web ページ、および GetAvailableWebPartDescriptions メソッドを使用するコード。
コード例の最初の部分は、Web ページ上の表示モードをユーザーが変更できるようにするユーザー コントロールです。次のソース コードをファイルに配置し、そのファイルに (使用する言語に応じて) Displaymodemenucs.ascx または Displaymodemenuvb.ascx という名前を付けます。表示モードの詳細、およびこのコントロールのソース コードの説明については、「チュートリアル : Web パーツ ページでの表示モードの変更」を参照してください。
<%@ 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" /> <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="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" /> <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>
コード例の 2 番目の部分は Web ページです。ページの先頭には 2 つの register ディレクティブがあります。1 つはユーザー コントロール用で、もう 1 つは、2 つのカスタム WebPart コントロールを格納しているコンパイル済みコンポーネント用です。これらのコントロールはどちらも、ページのマークアップで宣言によって参照されます。WebPart コントロールへの宣言による参照 (どちらも aspSample プレフィックスで始まります) では、それぞれに exportMode="all" 属性が追加されていることに注意してください。この属性により、コントロールの .WebPart 記述ファイルをエクスポートできるようになります。このファイルは、後でコントロールをページにインポートする手順で使用します。
![]() |
---|
Web パーツ アプリケーションのユーザーが WebPart コントロールの記述ファイルをエクスポートできるようにするには、Web.config ファイルで <webParts> 要素 (これは <system.web> 要素の子です) に enableExport="true" 属性を追加することで、Web アプリケーションのエクスポート機能を有効にすることも必要です。エクスポートは既定では無効になっています。したがって、アプリケーションのエクスポートをまだ有効にしていない場合は、ここで Web.config ファイルを編集して有効にしてください。 |
Web ページには、宣言要素の適切な階層内に入れ子になった ImportCatalogPart コントロールへの宣言参照もあります。GetAvailableWebPartDescriptions メソッドは、Button1_Click メソッドのコード内で呼び出されます。
<%@ 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"> Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Dim descriptions As WebPartDescriptionCollection = _ ImportCatalogPart1.GetAvailableWebPartDescriptions() Dim descriptionContent As StringBuilder = New StringBuilder() Dim description As WebPartDescription For Each description In descriptions descriptionContent.AppendLine("<div><p><strong>" + _ description.Title + "</strong><br />") descriptionContent.AppendLine(" ID: " + _ description.ID + "<br />") descriptionContent.AppendLine(" Description: " + _ description.Description + "<br /></div><hr />") Next description Label1.Text = "<h3>Catalog Contents</h3>" + descriptionContent.ToString() End Sub Protected Sub Button2_Click(ByVal sender As Object, ByVal e As EventArgs) Dim descriptions As WebPartDescriptionCollection = _ ImportCatalogPart1.GetAvailableWebPartDescriptions If (descriptions.Count > 0) Then Dim partToAdd As WebPart = ImportCatalogPart1.GetWebPart(descriptions(0)) WebPartManager1.AddWebPart(partToAdd, zone1, 0) End If End Sub Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Button1.Visible = false Button2.Visible = false Label1.Visible = false End Sub Protected Sub ImportCatalogPart1_PreRender(ByVal sender As Object, ByVal e As EventArgs) Button1.Visible = true Button2.Visible = true Label1.Visible = true End Sub </script> <html> <head id="Head1" 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> <asp:Calendar ID="Calendar1" runat="server" Title="My Calendar" /> <aspsample:textdisplaywebpart id="wp1" runat="server" Title="Text Display WebPart" exportmode="all" description="Dynamically displays text in a label"/> <aspsample:userinfowebpart id="wp2" runat="server" Title="User Info WebPart" exportmode="all" description="Gathers user information" /> </zonetemplate> </asp:webpartzone> <asp:CatalogZone ID="CatalogZone1" runat="server"> <ZoneTemplate> <asp:ImportCatalogPart ID="ImportCatalogPart1" runat="server" OnPreRender="ImportCatalogPart1_PreRender" /> </ZoneTemplate> </asp:CatalogZone> <hr /> <asp:Button ID="Button1" runat="server" Text="Get WebPart Description" OnClick="Button1_Click" /> <br /> <asp:Button ID="Button2" runat="server" Text="Use GetWebPart" OnClick="Button2_Click" /> <asp:Label ID="Label1" runat="server" Text=""></asp:Label> </form> </body> </html>
<%@ 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"> protected void Button1_Click(object sender, EventArgs e) { WebPartDescriptionCollection descriptions = ImportCatalogPart1.GetAvailableWebPartDescriptions(); StringBuilder descriptionContent = new StringBuilder(); foreach (WebPartDescription description in descriptions) { descriptionContent.AppendLine("<div><p><strong>" + description.Title + "</strong><br />"); descriptionContent.AppendLine(" ID: " + description.ID + "<br />"); descriptionContent.AppendLine(" Description: " + description.Description + "<br /></div><hr />"); } Label1.Text = "<h3>Catalog Contents</h3>" + descriptionContent.ToString(); } protected void Button2_Click(object sender, EventArgs e) { WebPartDescriptionCollection descriptions = ImportCatalogPart1.GetAvailableWebPartDescriptions(); if (descriptions.Count > 0) { WebPart partToAdd = ImportCatalogPart1.GetWebPart(descriptions[0]); WebPartManager1.AddWebPart(partToAdd, zone1, 0); } } protected void Page_Load(object sender, EventArgs e) { Button1.Visible = false; Button2.Visible = false; Label1.Visible = false; } protected void ImportCatalogPart1_PreRender(object sender, EventArgs e) { Button1.Visible = true; Button2.Visible = true; Label1.Visible = true; } </script> <html> <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> <asp:Calendar ID="Calendar1" runat="server" Title="My Calendar" /> <aspsample:textdisplaywebpart id="wp1" runat="server" Title="Text Display WebPart" exportmode="all" description="Dynamically displays text in a label"/> <aspsample:userinfowebpart id="wp2" runat="server" Title="User Info WebPart" exportmode="all" description="Gathers user information" /> </zonetemplate> </asp:webpartzone> <asp:CatalogZone ID="CatalogZone1" runat="server"> <ZoneTemplate> <asp:ImportCatalogPart ID="ImportCatalogPart1" runat="server" OnPreRender="ImportCatalogPart1_PreRender" /> </ZoneTemplate> </asp:CatalogZone> <hr /> <asp:Button ID="Button1" runat="server" Text="Get WebPart Description" OnClick="Button1_Click" /> <br /> <asp:Button ID="Button2" runat="server" Text="Use GetWebPart" OnClick="Button2_Click" /> <asp:Label ID="Label1" runat="server" Text=""></asp:Label> </form> </body> </html>
コード例の 3 番目の部分は、2 つの WebPart コントロールのソース コードです。コード例を実行するためには、このソース コードをコンパイルする必要があります。それを明示的にコンパイルし、コンパイル済みのアセンブリを Web サイトの Bin フォルダまたはグローバル アセンブリ キャッシュに配置できます。サイトの App_Code フォルダにソース コードを配置し、実行時に動的にコンパイルすることもできます。このコード例は、動的コンパイルを使用します。両方のコンパイル方法を示すチュートリアルについては、「チュートリアル : カスタム サーバー コントロールの開発と使用」を参照してください。
Imports System 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's 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 PetNameLabel 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) PetNameLabel = New Label() PetNameLabel.Text = Me.PetName SetControlAttributes(PetNameLabel) 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() PetNameLabel.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 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
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's 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 PetNameLabel; 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); PetNameLabel = new Label(); PetNameLabel.Text = this.PetName; SetControlAttributes(PetNameLabel); 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(); PetNameLabel.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 (input.Text != String.Empty) { _contentText = input.Text + @"<br />"; input.Text = String.Empty; DisplayContent.Text = this.ContentText; } } } }
ここでコード例を実行してください。ブラウザに Web ページを読み込みます。最初の手順では、各 WebPart コントロールの (TextDisplayWebPart コントロールと UserInfoWebPart コントロール) の .WebPart 記述ファイルをエクスポートします。それぞれのコントロールについて、コントロールの動詞メニュー (タイトル バーの下向きの矢印で表されます) をクリックし、[エクスポート] をクリックします。指示に従って、コントロールの .WebPart 記述ファイルを保存します。各コントロールの記述ファイルをエクスポートした後、Web ページを閉じ、エディタでページ ソースを編集します。<aspSample:userinfowebpart> コントロールと <aspSample:textdisplaywebpart> コントロールの宣言要素を削除し、ファイルを保存して閉じます。(この手順は、コントロールをページにインポートできるように、まだこれらのコントロールがないユーザーをシミュレートするために行います。)
ブラウザに再度 Web ページを読み込みます。[Display Mode] ドロップダウン リスト コントロールを使用して [カタログ] を選択し、ページをカタログ モードに切り替えます。ImportCatalogPart コントロールで、[参照] ボタンをクリックし、作成した .WebPart ファイルを参照し、1 つ選択して、[アップロード] ボタンをクリックします。コントロールへの参照が、その隣のチェック ボックスと共に表示されます。チェック ボックスをオンにし、[追加] をクリックして、コントロールをページに追加します。この処理を別のコントロールについても繰り返します。
ページがこの表示状態になっている間に、ページの下部近くにある [Get WebPart Description] ボタンをクリックして、ImportCatalogPart コントロールに現在読み込まれているコントロール記述に対応する WebPartDescription オブジェクトにプログラムによってアクセスする効果を確認してください。記述の詳細にアクセスするために使用するメソッド (ページ ソースの Button1_Click メソッドに見つかります) は、GetAvailableWebPartDescriptions メソッドです。ボタンの下にあるラベルには、コントロールに関する基本的な説明が表示されます。
最初のコントロールを追加した後、この処理を繰り返して、2 番目のコントロールをページに追加します。最後に、[閉じる] をクリックしてカタログ モードを終了し、ページをブラウズ モードに戻します。両方のカスタム コントロールがページに表示されるようになり、以前に記述ファイルをエクスポートしたときに保持していた値が格納されます。

Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


- ImportCatalogPart.GetAvailableWebPartDescriptions メソッドのページへのリンク