次の方法で共有


IWebActionable インターフェイス

定義

WebPart コントロールまたは他のサーバー コントロールに、動詞のコレクションを格納できるようにします。

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

次のコード例は、IWebActionable インターフェイスの簡単な実装を示します。 コード例の最初の部分では、インターフェイスをユーザー コントロールに実装する方法を示します。 ユーザー コントロールは、2 つのカスタム動詞を作成し、ユーザーがいずれかの動詞をクリックしたときに呼び出されるメソッドを定義することによって、 プロパティを実装 Verbs します。 わかりやすくするために、両方の動詞に同じメソッドが使用されます。 メソッドは、 という名前 VerbCounterClicksのプロパティの値を更新します。 メソッドの Page_Load コードは、 コントロールの プロパティにアクセス Verbs して、コレクション内のカスタム動詞の合計数を表示します。 このカウントには、標準の Web パーツ動詞は含まれません。

重要

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

<%@ control language="C#" classname="AccountUserControl" %>
<%@ implements 
    interface="System.Web.UI.WebControls.WebParts.IWebActionable" %>
<%@ Import Namespace="System.ComponentModel" %>

<script runat="server">

  private WebPartVerbCollection m_Verbs;
  
  [Personalizable]
  public string UserName
  {
    get
    {
      if (String.IsNullOrEmpty(Textbox1.Text) || 
        Textbox1.Text.Length < 0)
        return String.Empty;
      else
        return Textbox1.Text;
    }
    
    set
    {
      Textbox1.Text = value;
    }
  }
    
  [Personalizable]
  public string Phone
  {
    get
    {
      if(String.IsNullOrEmpty(Textbox2.Text) || 
        Textbox2.Text.Length < 0)
        return String.Empty;
      else
        return Textbox2.Text;
    }
    
    set
    {
      Textbox2.Text = value;
    }
  }

  // The following code handles the verbs.
  [Personalizable]
  public int VerbCounterClicks
  {
    get
    {
      object objVerbCounter = ViewState["VerbCounterClicks"];
      int VerbCounterClicks = 0;
      if (objVerbCounter != null)
        VerbCounterClicks = (int)objVerbCounter;

      return VerbCounterClicks;
    }
    set
    {
      ViewState["VerbCounterClicks"] = value;
    }
  }

  private void IncrementVerbCounterClicks(object sender, 
    WebPartEventArgs e)
  {
    VerbCounterClicks += 1;
    Label4.Text = "Custom Verbs Click Count: " + 
      this.VerbCounterClicks.ToString();
  }

  void Page_Load(object sender, EventArgs e)
  {
    Label3.Text = "Custom Verb Count:  " +
      WebPartManager.GetCurrentWebPartManager(Page).
      WebParts[0].Verbs.Count.ToString();
  }


  // <snippet3>
  // This property implements the IWebActionable interface.
  WebPartVerbCollection IWebActionable.Verbs
  {
    get
    {
      if (m_Verbs == null)
      {
        ArrayList verbsList = new ArrayList();
        WebPartVerb onlyVerb = new WebPartVerb
          ("customVerb1", new WebPartEventHandler(IncrementVerbCounterClicks));
        onlyVerb.Text = "My Verb";
        onlyVerb.Description = "VerbTooltip";
        onlyVerb.Visible = true;
        onlyVerb.Enabled = true;
        verbsList.Add(onlyVerb);
        WebPartVerb otherVerb = new WebPartVerb
          ("customVerb2", new WebPartEventHandler(IncrementVerbCounterClicks));
        otherVerb.Text = "My other Verb";
        otherVerb.Description = "Other VerbTooltip";
        otherVerb.Visible = true;
        otherVerb.Enabled = true;
        verbsList.Add(otherVerb);
        m_Verbs = new WebPartVerbCollection(verbsList);
        return m_Verbs;
      }
      return m_Verbs;
    }
  }
  // </snippet3>
  
</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 />
<br />
<asp:Label ID="Label3" runat="server" Text="" />
<br />
<asp:Label ID="Label4" runat="server" Text="" />
<%@ control language="vb" classname="AccountUserControlVB" %>
<%@ implements 
  interface="System.Web.UI.WebControls.WebParts.IWebActionable" %>
<%@ Import Namespace="System.ComponentModel" %>

<script runat="server">

  Private m_Verbs As WebPartVerbCollection

  <Personalizable()> _
  Public Property UserName() As String
    Get
      If String.IsNullOrEmpty(Textbox1.Text) OrElse _
        Textbox1.Text.Length < 0 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) OrElse _
        Textbox2.Text.Length < 0 Then
        Return String.Empty
      Else
        Return Textbox2.Text
      End If
    End Get
    Set(ByVal value As String)
      Textbox2.Text = value
    End Set
  End Property

  ' The following code handles the verbs.
  <Personalizable()> _
  Public Property VerbCounterClicks() As Integer
    Get
      Dim objVerbCounter As Object = _
        ViewState("VerbCounterClicks")
      VerbCounterClicks = 0
      If Not (objVerbCounter Is Nothing) Then
        VerbCounterClicks = CType(objVerbCounter, Int32)
      End If
      Return VerbCounterClicks
    End Get
    Set(ByVal value As Integer)
      ViewState("VerbCounterClicks") = value
    End Set
  End Property


  Private Sub IncrementVerbCounterClicks _
    (ByVal sender As Object, ByVal e As WebPartEventArgs)
    VerbCounterClicks += 1
    Label4.Text = "Custom Verbs Click Count: " + _
      Me.VerbCounterClicks.ToString()
  End Sub

  Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
    Label3.Text = "Custom Verb Count:  " + _
      WebPartManager.GetCurrentWebPartManager(Page). _
      WebParts(0).Verbs.Count.ToString()
  End Sub

  ' <snippet3>
  ' This property implements the IWebActionable interface.
  ReadOnly Property Verbs() As WebPartVerbCollection _
    Implements IWebActionable.Verbs
    Get
      If (m_Verbs Is Nothing) Then
        Dim verbsList As New ArrayList()
        Dim onlyVerb As New WebPartVerb _
          ("customVerb1", New WebPartEventHandler(AddressOf IncrementVerbCounterClicks))
        onlyVerb.Text = "My Verb"
        onlyVerb.Description = "VerbTooltip"
        onlyVerb.Visible = True
        onlyVerb.Enabled = True
        verbsList.Add(onlyVerb)
        Dim otherVerb As New WebPartVerb _
          ("customVerb2", New WebPartEventHandler(AddressOf IncrementVerbCounterClicks))
        otherVerb.Text = "My other Verb"
        otherVerb.Description = "Other VerbTooltip"
        otherVerb.Visible = True
        otherVerb.Enabled = True
        verbsList.Add(otherVerb)
        m_Verbs = New WebPartVerbCollection(verbsList)
      End If
      Return m_Verbs
    End Get
  End Property
  ' </snippet3>

</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 />
<br />
<asp:Label ID="Label3" runat="server" Text="" />
<br />
<asp:Label ID="Label4" runat="server" Text="" />

コード例の 2 番目の部分は、ユーザー コントロールをホストする.aspx ページです。 コントロールはコントロール内で WebPartZone 参照されるため、実行時 ASP.NET はユーザー コントロールを GenericWebPart コントロールにラップし、コントロールとして WebPart 扱います。 ブラウザーでページを読み込んだ後、コントロールの下部にあるラベルに、 プロパティによって参照されるコレクション内のカスタム動詞の数が Verbs 表示されます。 また、コントロールの [動詞] メニューをクリックし、いずれかの動詞をクリックすると、カスタム動詞がクリックされた合計回数を示す別のラベルが表示されます。

<%@ page language="c#" %>
<%@ register tagprefix="uc1" 
    tagname="AccountUserControl" 
    src="usercontrolverbcs.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:AccountUserControl 
            runat="server" 
            id="accountwebpart" 
            title="Account Form" />
        </zonetemplate>
      </asp:webpartzone> 
    </form>
  </body>
</html>
<%@ page language="vb" %>
<%@ register tagprefix="uc1" 
    tagname="AccountUserControlVB" 
    src="usercontrolverbvb.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" />
        </zonetemplate>
      </asp:webpartzone> 
    </form>
  </body>
</html>

注釈

コントロールの WebPart 動詞は、ユーザーがユーザー インターフェイス (UI) で実行できるアクションです。 通常、動詞は、ボタン、リンク、メニュー項目などのクリック可能なコントロールによって UI で表されます。 Web パーツ コントロール セットには、既定で使用できる標準の動詞が用意されています。この動詞は、ゾーンに WebPart 配置されたときにコントロールと同様 WebPart に動作するコントロールとその他のサーバー コントロール (カスタム、ASP.NET、ユーザー コントロールなど) に WebPartZoneBase 使用できます。 標準動詞には、閉じる、最小化する、復元する、削除する、編集する、エクスポートするなどがあります。

および サーバー コントロールで WebPart 使用するカスタム動詞を作成することもできます。 インターフェイスとそのVerbsプロパティをIWebActionable使用すると、カスタム動詞をコントロールに統合できます。 クラスは WebPart インターフェイスを IWebActionable 実装し、その 1 つのプロパティを実装します。 クラスを WebPart 継承するコントロールにカスタム動詞を追加するには、 プロパティを WebPart.Verbs オーバーライドし、カスタム動詞をコレクションに追加して、コレクションを返す必要があります。 プロパティによって WebPart.Verbs 参照されるコレクションには、カスタム動詞のみが含まれています。標準動詞は、このコレクションには含まれません。 既定ではコレクションにカスタム動詞がないため、WebPartコントロールnullの プロパティの既定の戻り値WebPart.Verbsは です。

コントロールではない WebPart サーバー コントロールにカスタム動詞を追加するには、1 つの追加手順が必要です。 このような場合、コントロールは インターフェイスを IWebActionable 実装し、 プロパティを実装する Verbs 必要もあります。

カスタム動詞をコレクションに Verbs 追加すると、Web パーツ コントロール セットによって、カスタム動詞の作成とレンダリングに必要なその他の手順が自動的に処理されます。

プロパティ

Verbs

カスタムの WebPartVerb オブジェクトのコレクションへの参照を取得します。

適用対象

こちらもご覧ください