IWebPart インターフェイス
アセンブリ: System.Web (system.web.dll 内)


IWebPart インターフェイスは、WebPart コントロールに対するユーザーの操作性を向上させる複数の UI 指向のプロパティを提供します。基本 WebPart クラスから派生するコントロールを作成する場合は、IWebPart インターフェイスのすべてのプロパティの実装が得られます。これは、WebPart 基本クラスがこのインターフェイスを実装するためです。
既存のユーザー コントロール、ASP.NET コントロール、または WebPart クラスから継承していないカスタム サーバー コントロールを、Web パーツ アプリケーションの一部として使用できます。これらは、IWebPart インターフェイスによって宣言されている、これらの UI 指向のプロパティを使用できます。WebPartZoneBase ゾーンに既存のサーバー コントロールを配置している場合、それらは実行時に GenericWebPart オブジェクトでラップされます。GenericWebPart クラスは、WebPart 基本クラスから継承するため、既存のサーバー コントロールを真の WebPart コントロールとして機能させ、それらに IWebPart インターフェイスのプロパティを追加します。
WebPart コントロールではないサーバー コントロールをゾーンに配置する場合、それらのコントロールは実行時に IWebPart プロパティを使用できます。また、ページのマークアップでサーバー コントロールのこれらのプロパティに (ページの永続的な書式で) 値を宣言できます。しかし、これらのプロパティは実行時にサーバー コントロールによって利用されるだけで、IntelliSense などのデザイン時のコーディング機能は、サーバー コントロールで宣言されている IWebPart プロパティを認識しません。これらのコントロールで宣言されたプロパティは、ページを読み込むときに機能しますが、Microsoft Visual Studio は、デザイン時にこれらのプロパティを有効であるとは見なしません。IWebPart プロパティを既存のサーバー コントロールおよびユーザー コントロールに追加してデザイン時のユーザーの操作性を向上させる場合は、サーバー コントロールに IWebPart インターフェイスを実装できます。
IWebPart インターフェイスを実装するもう 1 つの理由 (おそらくは主な理由) は、expando プロパティの使用をサポートしないコントロールのためです。expando プロパティは、実際は、IAttributeAccessor インターフェイスを通じてプロパティとしてクラスに動的に追加できる文字列です。WebControl クラスとその子を含め、このインターフェイスを実装するコントロールでは、expando プロパティを使用できます。このため、すべての ASP.NET サーバー コントロール、それらから派生したカスタム コントロール、Web ユーザー コントロール、および WebPart コントロールは、expando プロパティの使用をサポートします。しかし、基本 Control クラスから直接継承したカスタム コントロールでは、expando プロパティがサポートされません。このため、WebPartZone 内でこれらのコントロールを宣言しても、コントロール上の共通 IWebPart プロパティや、Title、Description などのプロパティを宣言できません。このようなコントロールで上記のプロパティを使用する場合は、IWebPart インターフェイスを実装する必要があります。
実装時の注意 通常、カスタムの WebPart コントロールまたはサーバー コントロールでは、IWebPart インターフェイスを実装する必要はありません。これは、基本 WebPart クラスが既にそのインターフェイスを実装しているからです。カスタムの WebPart コントロール、および WebPartZoneBase ゾーンに配置されているその他のサーバー コントロールは、すべての IWebPart プロパティを使用できます。 IWebPart インターフェイスを各自で実装する主な理由は、カスタム WebPart コントロールであっても他のサーバー コントロールであっても、既定の実装を変更するためです。たとえば、いくつかのプロパティの既定値を指定する場合があります。他にユーザー コントロールまたはサーバー コントロールにインターフェイスを実装する理由は、デザイン時にコントロールでこれらのプロパティを使用しやすくするためです。
ユーザー コントロールに IWebPart インターフェイスを実装する方法を次のコード例に示します。これは、プロパティの最小限の使用方法を示すための単純な実装例です。
コード例の最初の部分は、ユーザー コントロールを示します。ユーザー コントロールは、IWebPart インターフェイスのすべてのプロパティと、ユーザー インターフェイスでコントロールに結合される 2 つのパブリック プロパティを実装します。2 つのカスタム プロパティは、それぞれ Personalizable 属性を使用します。これは、これらのプロパティの値がブラウザ セッション間で保存されるようにします。このコード例には含まれていませんが、基本 WebPart クラスの実装では、IWebPart インターフェイスのすべてのプロパティも同様にパーソナル化可能として実装されます。
<%@ 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 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 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 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 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 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 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 ' 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 </script> <div> <asp:label id="Label1" runat="server">Name</asp:label> <asp:textbox id="Textbox1" runat="server" /> </div> <div> <asp:label id="Label2" runat="server">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"> <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"> 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="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; } } public string Description { get { object objTitle = ViewState["Description"]; if (objTitle == null) return String.Empty; return (string)objTitle; } set { ViewState["Description"] = value; } } public string Title { get { object objTitle = ViewState["Title"]; if (objTitle == null) return String.Empty; return (string)objTitle; } set { ViewState["Title"] = value; } } public string Subtitle { get { object objSubTitle = ViewState["Subtitle"]; if (objSubTitle == null) return "My Subtitle"; return (string)objSubTitle; } } public string TitleIconImageUrl { get { object objTitle = ViewState["TitleIconImageUrl"]; if (objTitle == null) return String.Empty; return (string)objTitle; } set { ViewState["TitleIconImageUrl"] = value; } } public string TitleUrl { get { object objTitle = ViewState["TitleUrl"]; if (objTitle == null) return String.Empty; return (string)objTitle; } set { ViewState["TitleUrl"] = value; } } public string CatalogIconImageUrl { get { object objTitle = ViewState["CatalogIconImageUrl"]; if (objTitle == null) return String.Empty; return (string)objTitle; } set { ViewState["CatalogIconImageUrl"] = value; } } // 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; } } </script> <div> <asp:label id="Label1" runat="server">Name</asp:label> <asp:textbox id="Textbox1" runat="server" /> </div> <div> <asp:label id="Label2" runat="server">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"> <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"> 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 プロパティ) に格納されています。
<%@ page language="VB" %> <%@ register tagprefix="uc1" tagname="AccountUserControlVB" src="AccountUserControlvb.ascx"%> <html> <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>
<%@ page language="c#" %> <%@ register tagprefix="uc1" tagname="AccountUserControlCS" src="AccountUserControlcs.ascx"%> <html> <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>

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 によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


- IWebPart インターフェイスのページへのリンク