IWebActionable 接口

定义

启用 WebPart 控件或其他服务器控件以包含谓词集合。Enables WebPart controls or other server controls to contain collections of verbs.

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

示例

下面的代码示例演示了如何简单实现 IWebActionable 接口。The following code example demonstrates a simple implementation of the IWebActionable interface. 此代码示例的第一部分演示如何在用户控件中实现接口。The first part of the code example shows how the interface is implemented in a user control. 用户控件通过创建两个自定义谓词并定义在用户单击任一谓词时调用的方法来实现 Verbs 属性。The user control implements the Verbs property by creating two custom verbs and defining a method that is called when a user clicks either of the verbs. 为简单起见,这两个谓词使用相同的方法。For simplicity, the same method is used for both verbs. 方法更新名为 VerbCounterClicks的属性的值。The method updates the value of a property named VerbCounterClicks. Page_Load 方法的代码访问控件的 Verbs 属性,以显示集合中自定义谓词的总计数。The code for the Page_Load method accesses the Verbs property of the control to display the total count of custom verbs in the collection. 此计数不包括标准 Web 部件谓词。This count does not include the standard Web Parts verbs.

重要

此示例具有一个接受用户输入的文本框,这是一个潜在的安全威胁。This example has a text box that accepts user input, which is a potential security threat. 默认情况下,ASP.NET 网页验证用户输入是否不包含脚本或 HTML 元素。By default, ASP.NET Web pages validate that user input does not include script or HTML elements. 有关详细信息,请参阅脚本侵入概述For more information, see Script Exploits Overview.

<%@ 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="" />

此代码示例的第二部分是承载用户控件的 .aspx 页。The second part of the code example is an .aspx page that hosts the user control. 由于控件是在 WebPartZone 控件中引用的,因此在运行时 ASP.NET 会将用户控件包装在 GenericWebPart 控件中并将其视为 WebPart 控件。Because the control is referenced in a WebPartZone control, at run time ASP.NET wraps the user control in a GenericWebPart control and treats it as a WebPart control. 在浏览器中加载页面后,请注意,控件底部的标签显示 Verbs 属性引用的集合中有多少个自定义谓词。After you load the page in a browser, notice that the label at the bottom of the control displays how many custom verbs are in the collection referenced by the Verbs property. 另请注意,如果单击控件中的谓词菜单,然后单击其中一个谓词,则会出现另一个标签,其中显示了自定义谓词被单击的总次数。Also note that if you click the verbs menu in the control, and click either of the verbs, another label appears showing the total number of times the custom verbs have been clicked.

<%@ 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)中执行的操作。A verb in WebPart controls is an action that a user can carry out in the user interface (UI). 通常,谓词由可单击的控件(如按钮、链接或菜单项)在 UI 中表示。Typically, a verb is represented in the UI by a clickable control such as a button, a link, or a menu item. Web 部件控制集提供默认情况下可用于 WebPart 控件和其他服务器控件(如自定义控件、ASP.NET 控件和用户控件)的标准谓词,这些控件在置于 WebPartZoneBase 区域时可以像 WebPart 控件一样操作。The Web Parts control set provides standard verbs that are available by default to WebPart controls and other server controls (such as custom, ASP.NET, and user controls) that can act like WebPart controls when placed in WebPartZoneBase zones. 标准谓词包括关闭、最小化、还原、删除、编辑和导出。Standard verbs include close, minimize, restore, delete, edit, and export.

你还可以创建自定义谓词以用于 WebPart 和服务器控件。You can also create custom verbs for use with WebPart and server controls. IWebActionable 接口及其 Verbs 属性,为你提供了一种将自定义谓词集成到控件中的方法。The IWebActionable interface, with its Verbs property, gives you a way to integrate custom verbs into your controls. WebPart 类实现 IWebActionable 接口并实现其单一属性。The WebPart class implements the IWebActionable interface and implements its single property. 若要向从 WebPart 类继承的控件添加自定义谓词,必须重写 WebPart.Verbs 属性,将自定义谓词添加到集合中,然后返回集合。To add custom verbs to a control that inherits from the WebPart class, you must override the WebPart.Verbs property, add custom verbs to a collection, and return the collection. WebPart.Verbs 属性引用的集合仅包含自定义谓词;此集合中不包含标准谓词。The collection referenced by the WebPart.Verbs property contains only custom verbs; standard verbs are not included in this collection. WebPart 控件中 WebPart.Verbs 属性的默认返回值 null,因为在默认情况下,集合中没有自定义谓词。The default return value of the WebPart.Verbs property in a WebPart control is null, because by default there are no custom verbs in the collection.

向不 WebPart 控件的服务器控件添加自定义谓词需要一个额外的步骤。Adding custom verbs to server controls that are not WebPart controls requires one extra step. 在这些情况下,控件还必须实现 IWebActionable 接口并实现 Verbs 属性。In those cases, the controls must also implement the IWebActionable interface and implement the Verbs property.

将自定义谓词添加到 Verbs 集合后,Web 部件控件集会自动处理创建和呈现自定义谓词所需的其他步骤。After you have added custom verbs to the Verbs collection, the Web Parts control set automatically handles the other steps necessary to create and render the custom verbs.

属性

Verbs

获取对自定义 WebPartVerb 对象的集合的引用。Gets a reference to a collection of custom WebPartVerb objects.

适用于

另请参阅