ImportCatalogPart クラスとは? わかりやすく解説

ImportCatalogPart クラス

メモ : このクラスは、.NET Framework version 2.0新しく追加されたものです。

あらかじめ定義した設定コントロールWeb ページ追加できるように、WebPart コントロール (または WebPart コントロールとして使用される他の ASP.NET サーバー コントロール) の記述ファイルインポートます。このクラス継承できません。

名前空間: System.Web.UI.WebControls.WebParts
アセンブリ: System.Web (system.web.dll 内)
構文構文

Public NotInheritable Class
 ImportCatalogPart
    Inherits CatalogPart
Dim instance As ImportCatalogPart
public sealed class ImportCatalogPart : CatalogPart
public ref class ImportCatalogPart sealed :
 public CatalogPart
public final class ImportCatalogPart extends
 CatalogPart
public final class ImportCatalogPart extends
 CatalogPart
解説解説

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 コントロール基づいて作成 (エクスポート) する必要があります記述ファイルは、次の条件満たされている場合コントロールに対してエクスポートできます

ユーザーは、コントロール動詞メニュー表示されている 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="&nbsp;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="&nbsp;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 コントロールページ表示されるようになり、以前エクスポートしたときの値が格納されています。

.NET Framework のセキュリティ.NET Frameworkセキュリティ
継承階層継承階層
System.Object
   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
スレッド セーフスレッド セーフ
この型の public static (Visual Basic では Shared) メンバはすべて、スレッド セーフです。インスタンス メンバ場合は、スレッド セーフであるとは限りません。
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「ImportCatalogPart クラス」の関連用語

ImportCatalogPart クラスのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



ImportCatalogPart クラスのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2024 Microsoft.All rights reserved.

©2024 GRAS Group, Inc.RSS