ImportCatalogPart イベント

名前 | 説明 | |
---|---|---|
![]() | DataBinding | サーバー コントロールがデータ ソースに連結すると発生します。 ( Control から継承されます。) |
![]() | Disposed | サーバー コントロールがメモリから解放されると発生します。これは、ASP.NET ページが要求されている場合のサーバー コントロールの有効期間における最終段階です。 ( Control から継承されます。) |
![]() | Init | サーバー コントロールが初期化されると発生します。これは、サーバー コントロールの有効期間における最初の手順です。 ( Control から継承されます。) |
![]() | Load | サーバー コントロールが Page オブジェクトに読み込まれると発生します。 ( Control から継承されます。) |
![]() | PreRender | Control オブジェクトの読み込み後、表示を開始する前に発生します。 ( Control から継承されます。) |
![]() | Unload | サーバー コントロールがメモリからアンロードされると発生します。 ( Control から継承されます。) |

関連項目
ImportCatalogPart クラスSystem.Web.UI.WebControls.WebParts 名前空間
PageCatalogPart
DeclarativeCatalogPart クラス
その他の技術情報
Web パーツ コントロール記述ファイルASP.NET Web パーツ ページ
ImportCatalogPart クラス
アセンブリ: System.Web (system.web.dll 内)


ImportCatalogPart コントロールを使用すると、ユーザーは、WebPartZoneBase ゾーンに追加する WebPart コントロールまたはサーバー コントロールの設定を記述した記述ファイルをインポートできます。
ユーザーが記述ファイルをインポートした後、そのファイルで参照される WebPart コントロールが ImportCatalogPart コントロール内に表示されます。ユーザーはこのコントロールをページに追加できます。
記述ファイルとコントロール自体は同じではありません。これは、末尾に .WebPart 拡張子が付いた、コントロールの状態を記述した名前/値ペア (ほとんどはプロパティ値) を含む XML ファイルです。記述ファイルは、「Web パーツ コントロール記述ファイル」トピックに記述されているように、指定した XML 形式に従って作成されています。
記述ファイルで参照されるコントロールには、コンパイル済みのアセンブリか、.ascx ファイルで定義されるユーザー コントロールを使用できます。どちらの場合も、インポートされる記述ファイルで参照されるコントロールは、そのコントロールをインポートしようとしてるページをホストする Web サーバーに存在する必要があります。記述ファイルは、コントロール名、そのコントロールを含むアセンブリ (またはファイル) を参照します。また、記述ファイルには、コントロールのプロパティ値、外観、および動作に影響する設定が含まれています。
ImportCatalogPart コントロールを使用すると、ユーザーがコントロールの設定を共有できます。複合コントロールでは、多数のプロパティおよび設定を保持できます。たとえば、大企業の典型的なイントラネット サイトでは、カスタムの WebPart コントロールに、データベース接続や部署の情報など、ユーザーの環境固有の値を保持するプロパティが多数含まれている場合があります。コントロールに、その外観に影響する多数のプロパティが含まれている場合もあります。1 人のユーザーが、特定のサイトのコントロールをパーソナル化して適切に動作するようにし、そのコントロールの記述ファイルをエクスポートして、それを他のユーザーと共有できます。他のユーザーは、そのファイルをインポートして、構成が完了しているコントロールを他のイントラネット サイトに追加して、そのサイトでパーソナル化できます。コントロールが含まれるコンパイル済みのアセンブリやユーザー コントロール ファイルが、そのサイトをホストしている Web サーバー上に存在する限り、ユーザーはそのコントロールを他の Web サイトに追加できます。
ユーザーが記述ファイル (およびそれに関連付けられたサーバー コントロール) を Web ページにインポートするために使用する機構は、ImportCatalogPart コントロールです。ページ開発者は、このコントロールを Web ページに追加する必要があります。ユーザーがページをカタログ表示モードに切り替えると、ImportCatalogPart コントロールが表示されます。ユーザーはこのコントロールを使用して、インポートするサーバー コントロールに対応する .WebPart 記述ファイルを参照できます。ImportCatalogPart コントロールによって提供される UI と指示に従って、ユーザーは、インポートした記述ファイルで指定されたとおりに外観とプロパティが完全に構成されている、目的のサーバー コントロールを Web ページに追加できます。
ユーザーは、WebPart コントロールの記述ファイルをインポートする前に、まず、そのファイルを既存の WebPart コントロールに基づいて作成 (エクスポート) する必要があります。記述ファイルは、次の条件が満たされている場合にコントロールに対してエクスポートできます。
-
Web.config ファイルで、<webParts> 要素の enableExport 属性値が true に設定されている。
-
開発者は、コントロールの ExportMode プロパティの値を、エクスポートが禁止されている既定値 None 以外の値に設定します。ExportMode プロパティ値が NonSensitiveData に設定されている場合、IsSensitive パラメータが Personalizable 属性に設定されたプロパティは、ユーザーが記述ファイルをエクスポートするときにエクスポートされません。これによって、コントロールの開発者は、特定の状況で接続文字列などの重要情報がエクスポートされるのを防ぐことができます。
ユーザーは、コントロールの動詞メニューに表示されている export 動詞をクリックし、そのコントロールの .WebPart 記述ファイルの保存についての指示に従うことによって、エクスポートが有効になっているコントロールをエクスポートできます。他のユーザーは、このファイルをインポートして、各自のコントロールのインスタンスを構成できます。
ImportCatalogPart クラスには、いくつかのプロパティが含まれています。BrowseHelpText プロパティには、ユーザーが記述ファイルを参照して検索するときの指示を含むテキストが格納されます。ImportedPartLabelText プロパティには、インポートされたコントロールが ImportCatalogPart コントロール内に表示されるときに、そのラベルとして機能するテキストが格納されます。PartImportErrorLabelText には、コントロールの説明をインポートしようとしてエラーが発生した場合に表示されるテキストが格納されます。Title プロパティは、開発者がタイトルを代入していない場合に、基本プロパティをオーバーライドして、ImportCatalogPart コントロールの既定のタイトルを代入します。UploadButtonText プロパティには、ユーザーが記述ファイルをアップロードするときにクリックするボタンのテキストが格納されます。また、UploadHelpText プロパティには、アップロード プロセスの指示が格納されます。
ImportCatalogPart クラスには、固有のメソッドもいくつかあります。GetAvailableWebPartDescriptions メソッドは、カタログ内の各 WebPart コントロールに対する WebPartDescription オブジェクトを取得します。カタログでは、ImportCatalogPart コントロールを使用することで、各サーバー コントロールについての情報をそのコントロールのインスタンスを作成しなくても表示できます。GetWebPart メソッドは、そのメソッドに渡される説明に基づいて、特定の WebPart コントロールのインスタンスを取得します。
ImportCatalogPart コントロールの使用に関連する本質的なリスクがいくつか存在します。1 つの例は、インポートに使用する記述ファイルを通じて、悪意あるデータを Web アプリケーションにインポートする可能性です。何者かが悪意あるスクリプト コードを文字列プロパティの値として記述ファイルに含めた場合、ユーザーがその記述ファイルをインポートし、参照されるサーバー コントロールを Web ページに追加すると、そのスクリプトが実行される可能性があります。悪意あるデータを含んだ記述ファイルをインポートするリスクを最小限に抑えるには、文字列型のプロパティを持つサーバー コントロールでは常にプロパティ データをエンコードする必要があります。別のリスクは、記述ファイルを通じた型のインポートによって発生します (「Web パーツ コントロール記述ファイル」 を参照してください)。悪意あるユーザーが大量のアセンブリを AppDomain に読み込む要求を送信する可能性があり、これによって限度を超えた量のメモリが消費される結果となります。
インポートに関連するリスクを回避するには、インポート機能や ImportCatalogPart コントロールを使用しないことによってこの機能を完全に無効にします。または、このコントロールにアクセスできるユーザーを制限できます。これは、ロール管理を使用して、プログラムによって行います (「ロールを使用した承認の管理」を参照してください)。たとえば、ページの読み込み時に、ユーザーが管理者ロールなど特定のロールに含まれているかどうかを確認するテストを実行できます。ユーザーがそのロールに含まれていれば、プログラムによって ImportCatalogPart コントロールをそのユーザーのページに追加できます。宣言による方法を使用して、ImportCatalogPart コントロールを使用できるユーザーを制限することもできます。カタログが含まれる Web ページ内に、2 つの CatalogZone コントロールを配置できます。1 つはインポートできるユーザー用、もう 1 つはインポートできないユーザー用です。インポートできるユーザー用のゾーンには、ImportCatalogPart コントロールを含めます。ゾーン自体を LoginView コントロール内に配置できます。これにより、ゾーン内のコントロールの使用を、認証されたユーザーや指定したロールだけに制限できます。

Web ページ上の ImportCatalogPart コントロールを宣言およびプログラムによって使用する方法を次のコード例に示します。この例は、4 つの部分で構成されます。
コード例の最初の部分は、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 コントロールを格納しているコンパイル済みコンポーネント用です。ページには、宣言要素の適切な階層内に入れ子になった ImportCatalogPart コントロールへの宣言参照があります。また、いくつかのプロパティ値が <asp:importcatalogpart> 要素で宣言によって代入されています。また、Button1_Click メソッドにより、ImportCatalogPart コントロールの多くのプロパティ値が更新されます。
ページの WebPartZone コントロールでは、2 つのカスタム WebPart コントロールが宣言されます。<aspSample:userinfowebpart> コントロールには、exportmode="all" 属性があります。この属性は、ユーザーがコントロールの記述ファイルをエクスポートできるようにするために必要です。このファイルは、記述ファイルを使用してコントロールをインポートしようとする別のユーザーが後でインポートできます。
![]() |
---|
Web パーツ アプリケーションのユーザーが WebPart コントロールの記述ファイルをエクスポートできるようにするには、Web.config ファイルで <webParts> 要素 (これは <system.web> 要素の子です) に enableExport="true" 属性を追加することで、Web アプリケーションのエクスポート機能を有効にすることも必要です。エクスポートは既定では無効になっています。したがって、アプリケーションのエクスポートをまだ有効にしていない場合は、ここで Web.config ファイルを編集して有効にしてください。 |
<%@ 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) 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 occured " _ & "during the import process." End Sub 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> <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>
<%@ 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) { 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 occured " + "during the import process."; } protected void Page_Load(object sender, EventArgs e) { Button1.Visible = false; } protected void ImportCatalogPart1_PreRender(object sender, EventArgs e) { Button1.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> <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>
コード例の 3 番目の部分は、2 つの WebPart コントロールのソース コードです。これらのコントロールではいくつかのプロパティに、WebBrowsable 属性がマークされています。これによって、PropertyGridEditorPart コントロールは、編集モードのときにユーザーがそれらのプロパティを編集するためのユーザー インターフェイス (UI) を動的に生成できます。プロパティには、WebDisplayName 属性もマークされています。これによって、編集中の UI で各コントロールの横に表示されるラベルのテキストを指定します。コード例を実行するためには、このソース コードをコンパイルする必要があります。それを明示的にコンパイルし、コンパイル済みのアセンブリを Web サイトの Bin フォルダまたはグローバル アセンブリ キャッシュに配置できます。サイトの App_Code フォルダにソース コードを配置し、実行時に動的にコンパイルすることもできます。このコード例は、動的コンパイルを使用します。両方のコンパイル方法を示すチュートリアルについては、「チュートリアル : カスタム サーバー コントロールの開発と使用」を参照してください。
TextDisplayWebPart と呼ばれるカスタム コントロールは、Web ページで <aspSample:TextDisplayWebPart> 要素によって参照されます。UserInfoWebPart という名前の別のコントロールも最初 Web ページ上で宣言されます。ただし、コントロールの記述ファイルをインポートする機能を示すために、後で削除することになります。
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 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
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; } } } }
ここでコード例を実行してください。ブラウザに Web ページを読み込みます。最初の手順は、UserInfoWebPart コントロールの編集です。[Display Mode] ドロップダウン リスト コントロールを使用して [編集] を選択し、ページを編集モードに切り替えます。UserInfoWebPart コントロールの動詞メニュー (タイトル バーの下向きの矢印) をクリックし、[編集] をクリックします。編集用の UI が表示されると、いくつかの編集用コントロールが UserInfoWebPart コントロールの下に表示されます。これを使用して、このコントロールのフィールド値を編集できます。いくつかのフィールドを編集し、[OK] をクリックして、[Display Mode] ドロップダウン リストを使用してページをブラウズ モードに戻します。
2 番目の手順は、UserInfoWebPart コントロールの .WebPart 記述ファイルのエクスポートです。カスタム コントロールの動詞メニュー (タイトル バーの下向きの矢印で表されます) をクリックし、[エクスポート] をクリックします。指示に従って、コントロールの .WebPart 記述ファイルを保存します。ここで Web ページを閉じ、エディタでページ ソースを編集します。<aspSample:userinfowebpart> コントロールの宣言要素を削除し、ファイルを保存して閉じます。(この手順は、コントロールをページにインポートできるように、まだ UserInfoWebPart コントロールがないユーザーをシミュレートするために行います。)
ブラウザに再度 Web ページを読み込みます。UserInfoWebPart コントロールは削除したので表示されません。[Display Mode] ドロップダウン リスト コントロールを使用して [カタログ] を選択し、ページをカタログ モードに切り替えます。ImportCatalogPart コントロールで、[参照] ボタンをクリックし、作成した .WebPart ファイルを参照して、[アップロード] ボタンをクリックします。コントロールへの参照が、その隣のチェック ボックスと共に表示されます。チェック ボックスをオンにし、[追加] をクリックして、コントロールをページに追加します。
ページがこの表示状態になっている間に、ページの下部近くにある [Update ImportCatalogPart] ボタンをクリックして、ImportCatalogPart コントロールの多くのプロパティ値をプログラムによって更新する効果を確認してください。ボタンをクリックした後、さまざまなプロパティが UI でどのように変更されるかを確認してください。
最後に、[閉じる] をクリックしてカタログ モードを終了し、ページをブラウズ モードに戻します。UserInfoWebPart コントロールがページに表示されるようになり、以前にエクスポートしたときの値が格納されています。


System.Web.UI.Control
System.Web.UI.WebControls.WebControl
System.Web.UI.WebControls.Panel
System.Web.UI.WebControls.WebParts.Part
System.Web.UI.WebControls.WebParts.CatalogPart
System.Web.UI.WebControls.WebParts.ImportCatalogPart


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 コンストラクタ
アセンブリ: System.Web (system.web.dll 内)


ImportCatalogPart コンストラクタは既定です。ImportCatalogPart クラスで宣言されるコンストラクタはないので、クラスの新しいインスタンスが作成される場合に特別なタスクは実行されません。.NET Framework は、内部でコンストラクタを使用して、クラスのインスタンスを作成します。
通常、独自のコードでプログラムから ImportCatalogPart コンストラクタを使用する必要はありません。このコントロールでは、ページ開発者がデザイン時に宣言によってコントロールをページに追加するという使用法が想定されています。

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 プロパティ


関連項目
ImportCatalogPart クラスSystem.Web.UI.WebControls.WebParts 名前空間
PageCatalogPart
DeclarativeCatalogPart クラス
その他の技術情報
Web パーツ コントロール記述ファイルASP.NET Web パーツ ページ
ImportCatalogPart メソッド


名前 | 説明 | |
---|---|---|
![]() | Finalize | Object がガベージ コレクションにより収集される前に、その Object がリソースを解放し、その他のクリーンアップ操作を実行できるようにします。 ( Object から継承されます。) |
![]() | MemberwiseClone | 現在の Object の簡易コピーを作成します。 ( Object から継承されます。) |

関連項目
ImportCatalogPart クラスSystem.Web.UI.WebControls.WebParts 名前空間
PageCatalogPart
DeclarativeCatalogPart クラス
その他の技術情報
Web パーツ コントロール記述ファイルASP.NET Web パーツ ページ
ImportCatalogPart メンバ
あらかじめ定義した設定でコントロールを Web ページに追加できるように、WebPart コントロール (または WebPart コントロールとして使用される他の ASP.NET サーバー コントロール) の記述ファイルをインポートします。このクラスは継承できません。
ImportCatalogPart データ型で公開されるメンバを以下の表に示します。




名前 | 説明 | |
---|---|---|
![]() | Finalize | Object がガベージ コレクションにより収集される前に、その Object がリソースを解放し、その他のクリーンアップ操作を実行できるようにします。 (Object から継承されます。) |
![]() | MemberwiseClone | 現在の Object の簡易コピーを作成します。 (Object から継承されます。) |

名前 | 説明 | |
---|---|---|
![]() | DataBinding | サーバー コントロールがデータ ソースに連結すると発生します。(Control から継承されます。) |
![]() | Disposed | サーバー コントロールがメモリから解放されると発生します。これは、ASP.NET ページが要求されている場合のサーバー コントロールの有効期間における最終段階です。(Control から継承されます。) |
![]() | Init | サーバー コントロールが初期化されると発生します。これは、サーバー コントロールの有効期間における最初の手順です。(Control から継承されます。) |
![]() | Load | サーバー コントロールが Page オブジェクトに読み込まれると発生します。(Control から継承されます。) |
![]() | PreRender | Control オブジェクトの読み込み後、表示を開始する前に発生します。(Control から継承されます。) |
![]() | Unload | サーバー コントロールがメモリからアンロードされると発生します。(Control から継承されます。) |

関連項目
ImportCatalogPart クラスSystem.Web.UI.WebControls.WebParts 名前空間
PageCatalogPart
DeclarativeCatalogPart クラス
その他の技術情報
Web パーツ コントロール記述ファイルASP.NET Web パーツ ページ
- ImportCatalogPartのページへのリンク