IWebPart インターフェイス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
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 されません。 これらのコントロールで宣言されたプロパティは、ページを読み込むと引き続き機能しますが、visual Studio Microsoftデザイン時にプロパティが有効であると認識されません。 プロパティを既存の 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 コントロールのタイトルを取得または設定します。 |
TitleIconImageUrl |
Web パーツ コントロールのタイトル バーでそのコントロールを表すために使用されるイメージへの URL を取得または設定します。 |
TitleUrl |
WebPart コントロールに関する補足情報の URL を取得または設定します。 |
適用対象
こちらもご覧ください
.NET
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示