次の方法で共有


IWebPart インターフェイス

定義

ASP.NET WebPart コントロールによって使用される共通のユーザー インターフェイス (UI) プロパティを定義します。

public interface class IWebPart
public interface IWebPart
type IWebPart = interface
Public Interface IWebPart
派生

次のコード例は、ユーザー コントロールに インターフェイスを IWebPart 実装する方法を示しています。 これは、プロパティを実装する方法を最小限に示す単純な実装です。

コード例の最初の部分は、ユーザー コントロールを示しています。 ユーザー コントロールは、インターフェイスのすべてのプロパティと、ユーザー インターフェイスの IWebPart コントロールに関連付けられている 2 つの追加のパブリック プロパティを実装します。 2 つのカスタム プロパティはそれぞれ 属性を Personalizable 使用します。これにより、これらのプロパティの値をブラウザー セッション間で保存できます。 基底 WebPart クラスの実装では、インターフェイスのすべてのプロパティ IWebPart もカスタマイズ可能として実装されますが、このコード例には含まれていません。

<%@ control language="C#" classname="AccountUserControlCS"%>
<%@ implements interface="System.Web.UI.WebControls.WebParts.IWebPart" %>

<script runat="server">

  private string m_Description;
  private string m_Title;
  private string m_TitleIconImageUrl;
  private string m_TitleUrl;
  private string m_CatalogIconImageUrl;
  
  [Personalizable]
  public string UserName
  {
    get
    {
      if(String.IsNullOrEmpty(Textbox1.Text))
        return String.Empty;
      else
        return Textbox1.Text;
    }
    
    set
    {
      Textbox1.Text = value;
    }
  }
    
  [Personalizable]
  public string Phone
  {
    get
    {
      if(String.IsNullOrEmpty(Textbox2.Text))
        return String.Empty;
      else
        return Textbox2.Text;
    }
    
    set
    {
      Textbox2.Text = value;
    }
  }

  // <snippet3>
  public string Description
  {
    get
    {
      object objTitle = ViewState["Description"];
      if (objTitle == null)
        return String.Empty;

      return (string)objTitle;
    }
    set
    {
      ViewState["Description"] = value;
    }
  }
  // </snippet3>

  // <snippet4>
  public string Title
  {
    get
    {
      object objTitle = ViewState["Title"];
      if (objTitle == null)
        return String.Empty;

      return (string)objTitle;
    }
    set
    {
      ViewState["Title"] = value;
    }
  }
  // </snippet4>

  // <snippet5>
  public string Subtitle
  {
    get
    {
      object objSubTitle = ViewState["Subtitle"];
      if (objSubTitle == null)
        return "My Subtitle";

      return (string)objSubTitle;
    }

  }
  // </snippet5>

  // <snippet6>
  public string TitleIconImageUrl
  {
    get
    {
      object objTitle = ViewState["TitleIconImageUrl"];
      if (objTitle == null)
        return String.Empty;

      return (string)objTitle;
    }
    set
    {
      ViewState["TitleIconImageUrl"] = value;
    }
  }
  // </snippet6>

  // <snippet7>
  public string TitleUrl
  {
    get
    {
      object objTitle = ViewState["TitleUrl"];
      if (objTitle == null)
        return String.Empty;

      return (string)objTitle;
    }
    set
    {
      ViewState["TitleUrl"] = value;
    }
  }
  // </snippet7>

  // <snippet8>
  public string CatalogIconImageUrl
  {
    get
    {
      object objTitle = ViewState["CatalogIconImageUrl"];
      if (objTitle == null)
        return String.Empty;

      return (string)objTitle;
    }
    set
    {
      ViewState["CatalogIconImageUrl"] = value;
    }
  }
  // </snippet8>
  
  // <snippet9>
  // Update the selected IWebPart property value.
  void Button1_Click(object sender, EventArgs e)
  {
    String propertyValue = Server.HtmlEncode(TextBox3.Text);
    TextBox3.Text = String.Empty;

    switch (RadioButtonList1.SelectedValue)
    {
      case "title":
        this.Title = propertyValue;
        break;
      case "description":
        this.Description = propertyValue;
        break;
      case "catalogiconimageurl":
        this.CatalogIconImageUrl = propertyValue;
        break;
      case "titleiconimageurl":
        this.TitleIconImageUrl = propertyValue;
        break;
      case "titleurl":
        this.TitleUrl = propertyValue;
        break;
      default:
        break;
    }
  }
  // </snippet9>
  
</script>
<div>
<asp:label id="Label1" runat="server" AssociatedControlID="Textbox1">
  Name</asp:label>
<asp:textbox id="Textbox1" runat="server" />
</div>
<div>
<asp:label id="Label2" runat="server" AssociatedControlID="Textbox2">
  Phone</asp:label>
<asp:textbox id="Textbox2" runat="server"></asp:textbox>
</div>
<div>
<asp:button id="Button2" runat="server" text="Save Form Values" />
</div>
<hr />
<asp:Label ID="Label3" Runat="server" Text="Label" 
  AssociatedControlID="RadioButtonList1">
  <h3>Update selected IWebPart property values.</h3>
</asp:Label>
<asp:RadioButtonList ID="RadioButtonList1" Runat="server">
  <asp:ListItem Value="title">Title</asp:ListItem>
  <asp:ListItem Value="description">Description</asp:ListItem>
  <asp:ListItem Value="catalogiconimageurl">CatalogIconImageUrl</asp:ListItem>
  <asp:ListItem Value="titleiconimageurl">TitleIconImageUrl</asp:ListItem>
  <asp:ListItem Value="titleurl">TitleUrl</asp:ListItem>
</asp:RadioButtonList>
<br />
<asp:Label ID="Label4" runat="server" Text="Label"
  AssociatedControlID="TextBox3">
Property Value:  
</asp:Label>
<asp:TextBox ID="TextBox3" runat="server">
</asp:TextBox>  
<br />  
<asp:Button ID="Button1" runat="server" 
  Text="Update Property" 
  OnClick="Button1_Click">
</asp:Button>
<%@ control language="VB" classname="AccountUserControlVB"%>
<%@ implements interface="System.Web.UI.WebControls.WebParts.IWebPart" %>

<script runat="server">

  Private m_Description As String
  Private m_Title As String
  Private m_TitleIconImageUrl As String
  Private m_TitleUrl As String
  Private m_CatalogIconImageUrl As String


  <Personalizable()> _
  Public Property UserName() As String
    Get
      If String.IsNullOrEmpty(Textbox1.Text) Then
        Return String.Empty
      Else
        Return Textbox1.Text
      End If
    End Get
    Set(ByVal value As String)
      Textbox1.Text = Value
    End Set
  End Property

  <Personalizable()> _
  Public Property Phone() As String
    Get
      If String.IsNullOrEmpty(Textbox2.Text) Then
        Return String.Empty
      Else
        Return Textbox2.Text
      End If
    End Get
    Set(ByVal value As String)
      Textbox2.Text = Value
    End Set
  End Property

  ' <snippet3>
  Public Property Description() As String _
    Implements IWebPart.Description
    Get
      Dim objTitle As Object = ViewState("Description")
      If objTitle Is Nothing Then
        Return String.Empty
      End If
      Return CStr(objTitle)
    End Get
    Set(ByVal value As String)
      ViewState("Description") = value
    End Set
  End Property
  ' </snippet3>
  
  ' <snippet4>
  Public Property Title() As String _
    Implements IWebPart.Title
    Get
      Dim objTitle As Object = ViewState("Title")
      If objTitle Is Nothing Then
        Return String.Empty
      End If
      Return CStr(objTitle)
    End Get
    Set(ByVal value As String)
      ViewState("Title") = value
    End Set
  End Property
  ' </snippet4>
  
  ' <snippet5>
  ReadOnly Property Subtitle() As String _
    Implements IWebPart.Subtitle
    Get
      Dim objSubTitle As Object = ViewState("Subtitle")
      If objSubTitle Is Nothing Then
        Return "My Subtitle"
      End If
      Return CStr(objSubTitle)
    End Get
  End Property
  ' </snippet5>
  
  ' <snippet6>
  Public Property TitleIconImageUrl() As String _
    Implements IWebPart.TitleIconImageUrl
    Get
      Dim objTitle As Object = ViewState("TitleIconImageUrl")
      If objTitle Is Nothing Then
        Return String.Empty
      End If
      Return CStr(objTitle)
    End Get
    Set(ByVal value As String)
      ViewState("TitleIconImageUrl") = value
    End Set
  End Property
  ' </snippet6>
  
  ' <snippet7>
  Public Property TitleUrl() As String _
    Implements IWebPart.TitleUrl
    Get
      Dim objTitle As Object = ViewState("TitleUrl")
      If objTitle Is Nothing Then
        Return String.Empty
      End If
      Return CStr(objTitle)
    End Get
    Set(ByVal value As String)
      ViewState("TitleUrl") = value
    End Set
  End Property
  ' </snippet7>
  
  ' <snippet8>
  Public Property CatalogIconImageUrl() As String _
    Implements IWebPart.CatalogIconImageUrl
    Get
      Dim objTitle As Object = ViewState("CatalogIconImageUrl")
      If objTitle Is Nothing Then
        Return String.Empty
      End If
      Return CStr(objTitle)
    End Get
    Set(ByVal value As String)
      ViewState("CatalogIconImageUrl") = value
    End Set
  End Property
  ' </snippet8>
  
  ' <snippet9>
  ' Update the selected IWebPart property value.
  Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs)
    Dim propertyValue As String = Server.HtmlEncode(TextBox3.Text)
    TextBox3.Text = String.Empty
      
    Select Case RadioButtonList1.SelectedValue
      Case "title"
        Me.Title = propertyValue
      Case "description"
        Me.Description = propertyValue
      Case "catalogiconimageurl"
        Me.CatalogIconImageUrl = propertyValue
      Case "titleiconimageurl"
        Me.TitleIconImageUrl = propertyValue
      Case "titleurl"
        Me.TitleUrl = propertyValue
      Case Else
    End Select

  End Sub 'Button1_Click
  ' </snippet9>
  
</script>
<div>
<asp:label id="Label1" runat="server" AssociatedControlID="Textbox1">
  Name</asp:label>
<asp:textbox id="Textbox1" runat="server" />
</div>
<div>
<asp:label id="Label2" runat="server" AssociatedControlID="Textbox2">
  Phone</asp:label>
<asp:textbox id="Textbox2" runat="server"></asp:textbox>
</div>
<div>
<asp:button id="Button2" runat="server" text="Save Form Values" />
</div>
<hr />
<asp:Label ID="Label3" Runat="server" AssociatedControlID="RadioButtonList1">
  <h3>Update selected IWebPart property values.</h3>
</asp:Label>
<asp:RadioButtonList ID="RadioButtonList1" Runat="server">
  <asp:ListItem Value="title">Title</asp:ListItem>
  <asp:ListItem Value="description">Description</asp:ListItem>
  <asp:ListItem Value="catalogiconimageurl">CatalogIconImageUrl</asp:ListItem>
  <asp:ListItem Value="titleiconimageurl">TitleIconImageUrl</asp:ListItem>
  <asp:ListItem Value="titleurl">TitleUrl</asp:ListItem>
</asp:RadioButtonList>
<br />
<asp:Label ID="Label4" runat="server" AssociatedControlID="TextBox3">
Property Value:  
</asp:Label>
<asp:TextBox ID="TextBox3" runat="server">
</asp:TextBox>  
<br />  
<asp:Button ID="Button1" runat="server" 
  Text="Update Property" 
  OnClick="Button1_Click">
</asp:Button>

コード例の 2 番目の部分は、ユーザー コントロールをホストする Web ページを示しています。 ページには WebPartZone 、ユーザー コントロールが参照されるコントロールがあります。 インターフェイスのプロパティ値の IWebPart 一部は、ユーザー コントロールのマークアップで宣言によって設定され、デザイン時と実行時にコントロールと同様に WebPart 動作し、表示されます。 ブラウザーでページを読み込む場合は、ページ上の UI を使用して、実行時に実装された IWebPart プロパティの値をプログラムで変更する機能を示すことができます。 一部のプロパティ値を変更すると、変更はページ上では明らかではありませんが、ページ ソース ( TitleIconImageUrl プロパティ) に表示されるか、アプリケーションの状態データ ( CatalogIconImageUrl プロパティ) に格納されます。

重要

この例には、ユーザー入力を受け付けるテキスト ボックスがあります。これにより、セキュリティが脆弱になる可能性があります。 既定では、ASP.NET Web ページによって、ユーザー入力にスクリプトまたは HTML 要素が含まれていないかどうかが検証されます。 詳細については、「スクリプトによる攻略の概要」を参照してください。

<%@ page language="c#" %>
<%@ register tagprefix="uc1" 
    tagname="AccountUserControlCS" 
    src="AccountUserControlcs.ascx"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
  <head runat="server">
    <title>
      Personalizable User Control with IWebPart Properties
    </title>
  </head>
  <body>
    <form id="form1" runat="server">
      <asp:webpartmanager id="WebPartManager1" runat="server" />
      <asp:webpartzone 
        id="zone1" 
        runat="server" 
        headertext="Main" 
        CloseVerb-Enabled="false">
        <zonetemplate>
          <uc1:AccountUserControlCS 
            runat="server" 
            id="accountwebpart" 
            title="Account Form"
            Description="Account Form with default values."
            CatalogIconImageUrl="MyCatalogIcon.gif"
            TitleIconImageUrl="MyTitleIcon.gif"
            TitleUrl="MyUrl.html"/>
        </zonetemplate>
      </asp:webpartzone>    
    </form>
  </body>
</html>
<%@ page language="VB" %>
<%@ register tagprefix="uc1" 
    tagname="AccountUserControlVB" 
    src="AccountUserControlvb.ascx"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
  <head runat="server">
    <title>
      Personalizable User Control with IWebPart Properties
    </title>
  </head>
  <body>
    <form id="form1" runat="server">
      <asp:webpartmanager id="WebPartManager1" runat="server" />
      <asp:webpartzone 
        id="zone1" 
        runat="server" 
        headertext="Main" 
        CloseVerb-Enabled="false">
        <zonetemplate>
          <uc1:AccountUserControlVB 
            runat="server" 
            id="accountwebpart" 
            title="Account Form"
            Description="Account Form with default values."
            CatalogIconImageUrl="MyCatalogIcon.gif"
            TitleIconImageUrl="MyTitleIcon.gif"
            TitleUrl="MyUrl.html"/>
        </zonetemplate>
      </asp:webpartzone>    
    </form>
  </body>
</html>

注釈

インターフェイスには IWebPart 、コントロールを操作するユーザー エクスペリエンスを向上させる UI 指向のプロパティがいくつか用意 WebPart されています。 基底クラスから派生するコントロールを作成すると、基底 WebPart クラスがこのインターフェイスを実装するため、インターフェイス内 IWebPart のすべてのプロパティの実装を WebPart 取得します。

既存のユーザー コントロール、ASP.NET コントロール、または Web パーツ アプリケーションの一部としてクラスから WebPart 継承されないカスタム サーバー コントロールを使用できます。また、インターフェイスによって IWebPart 宣言されたこれらの UI 指向のプロパティを使用することもできます。 既存のサーバー コントロールを WebPartZoneBase ゾーンに配置すると、実行時にオブジェクトで GenericWebPart ラップされます。 クラスは GenericWebPart 基底クラスから WebPart 継承されるため、既存のサーバー コントロールを true WebPart コントロールとして機能させ、インターフェイスの IWebPart プロパティを追加します。

コントロールではない WebPart サーバー コントロールをゾーンに配置する場合は、実行時にプロパティを IWebPart 使用できます。また、ページのマークアップ (ページ永続化形式) でサーバー コントロールでこれらのプロパティの値を宣言することもできます。 ただし、これらのプロパティは実行時にサーバー コントロールでのみ使用できるため、IntelliSense などのデザイン時のコーディング機能では、サーバー コントロールで宣言されているプロパティは認識 IWebPart されません。 これらのコントロールで宣言されたプロパティは、ページを読み込むと引き続き機能しますが、Microsoft Visual Studio では、デザイン時にプロパティが有効であると認識されません。 デザイン時のユーザー エクスペリエンスを IWebPart 向上させるために、既存のサーバー コントロールとユーザー コントロールにプロパティを追加する場合は、サーバー コントロールに インターフェイスを実装 IWebPart できます。

おそらく、インターフェイスを実装 IWebPart する主な理由は、expando (カスタム) プロパティの使用をサポートしていないコントロールの場合です。 Expando プロパティは、インターフェイスを使用 IAttributeAccessor して、プロパティとして動的にクラスに追加できる文字列です。 クラスとその子を含む、このインターフェイスを実装する WebControl コントロールでは、expando プロパティを使用できます。 したがって、すべての ASP.NET サーバー コントロール、そこから派生するカスタム コントロール、Web ユーザー コントロール、および WebPart コントロールは、expando プロパティの使用をサポートしています。 ただし、基底 Control クラスから直接継承するカスタム コントロールでは、expando プロパティはサポートされていません。 したがって、 内でこれらのコントロールをWebPartZone宣言した場合、コントロールの共通IWebPartプロパティ (および DescriptionなどのTitleプロパティ) を宣言することはできません。 このようなコントロールでこれらのプロパティを使用する場合は、 インターフェイスを実装する IWebPart 必要があります。

注意 (実装者)

通常、基本WebPartクラスにはインターフェイスがIWebPart既に実装されているため、カスタム WebPart コントロールまたはサーバー コントロールにインターフェイスを実装する必要はありません。 カスタム WebPart コントロール、およびゾーンに配置されたその他の WebPartZoneBase サーバー コントロールは、すべてのプロパティを IWebPart 使用できます。

カスタム WebPart コントロールでも別のIWebPartサーバー コントロールでも、インターフェイスを自分で実装する主な理由は、既定の実装を変更する場合です。 たとえば、一部のプロパティに既定値を指定できます。 ユーザーまたはサーバー コントロールにインターフェイスを実装するもう 1 つの理由は、コントロールでこれらのプロパティを操作するデザイン時のエクスペリエンスが向上するためです。

プロパティ

CatalogIconImageUrl

コントロールのカタログで WebPart コントロールを表すイメージの URL を取得または設定します。

Description

WebPart コントロールのツールヒントやカタログで使用する、コントロールの動作をまとめた短い語句を取得または設定します。

Subtitle

Title プロパティ値と連結されて WebPart コントロールの完全なタイトルを形成する文字列を取得します。

Title

WebPart コントロールのタイトルを取得または設定します。

TitleIconImageUrl

Web パーツ コントロールのタイトル バーでそのコントロールを表すために使用されるイメージへの URL を取得または設定します。

TitleUrl

WebPart コントロールに関する補足情報の URL を取得または設定します。

適用対象

こちらもご覧ください