WebPartVerb 类

定义

提供使用户能在 Web 部件页面上执行操作的交互式用户界面 (UI) 元素。

public ref class WebPartVerb : System::Web::UI::IStateManager
[System.ComponentModel.TypeConverter(typeof(System.Web.UI.WebControls.EmptyStringExpandableObjectConverter))]
public class WebPartVerb : System.Web.UI.IStateManager
[<System.ComponentModel.TypeConverter(typeof(System.Web.UI.WebControls.EmptyStringExpandableObjectConverter))>]
type WebPartVerb = class
    interface IStateManager
Public Class WebPartVerb
Implements IStateManager
继承
WebPartVerb
属性
实现

示例

下面的代码示例演示如何创建自定义 WebPartVerb 对象,以及使用 OnCreateVerbs 方法将谓词添加到区域中包含的每个 WebPart 控件的谓词菜单的自定义区域。 代码示例包含四个部分:

  • 包含显示某些文本的简单自定义 WebPart 控件的源文件。

  • 一个源文件,其中包含一个自定义 WebPartVerb 对象,以及一个简单自定义 WebPartZoneBase 区域,用于替代 OnCreateVerbs 方法,以将自定义谓词添加到 WebPart 区域中的控件。

  • 包含自定义区域和自定义 WebPart 控件的网页。

  • 示例工作原理的说明。

代码示例的第一部分包含源代码,用于创建显示某些文本的简单 WebPart 控件。 若要运行代码示例,必须编译此源代码。 可以显式编译它,并将生成的程序集放入网站的 Bin 文件夹或全局程序集缓存中。 或者,可以将源代码放入站点的“App_Code”文件夹中,并在运行时动态编译源代码。 此代码示例使用动态编译方法。 有关演示如何编译的演练,请参阅 演练:开发和使用自定义 Web 服务器控件

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Security.Permissions;
using System.Collections.Generic;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

namespace Samples.AspNet.CS.Controls
{

    // This code snippet creates a simple Web Part control.
    [AspNetHostingPermission(SecurityAction.Demand,
      Level = AspNetHostingPermissionLevel.Minimal)]
    [AspNetHostingPermission(SecurityAction.InheritanceDemand,
      Level = AspNetHostingPermissionLevel.Minimal)]
    public class SimpleControl : WebPart
    {

        private String _text = "Simple control text";

        public string Text
        {
            get
            {
                if (_text != null)
                    return _text;
                else
                    return string.Empty;
            }
            set { _text = value; }
        }

        protected override void Render(System.Web.UI.HtmlTextWriter 
      writer)
        {
            writer.Write(this.Text);
        }
    }
}
Imports System.Data
Imports System.Configuration
Imports System.Web
Imports System.Web.Security
Imports System.Collections.Generic
Imports System.Security.Permissions
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Web.UI.WebControls.WebParts
Imports System.Web.UI.HtmlControls

' This code snippet creates a simple Web Part control.
Namespace Samples.AspNet.VB.Controls

  <AspNetHostingPermission(SecurityAction.Demand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  <AspNetHostingPermission(SecurityAction.InheritanceDemand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  Public Class SimpleControl
    Inherits System.Web.UI.WebControls.WebParts.WebPart

    Private _text As String = "Simple control text"

    Public Property [Text]() As String
      Get
        If Not (_text Is Nothing) Then
          Return _text
        Else
          Return String.Empty
        End If
      End Get
      Set(ByVal value As String)
        _text = value
      End Set
    End Property

    Protected Overrides Sub Render(ByVal writer _
      As System.Web.UI.HtmlTextWriter)

      writer.Write(Me.Text)

    End Sub

  End Class

End Namespace

该示例的第二部分包含用于创建自定义区域和自定义 WebPartVerb 对象的源代码。 请注意,区域会替代 方法, OnCreateVerbs 以将自定义谓词添加到区域中的任何 WebPart 控件。 谓词默认添加到控件的谓词菜单中。 请注意,在自定义谓词的代码中,谓词的构造函数使用服务器单击处理程序,名为 的方法会创建直接从 WebPart 类继承的任何控件的完整副本,并将新创建的副本添加到同一区域。 与代码示例的第一部分一样,必须编译此源代码,在此示例中,源文件放置在要动态编译App_Code子文件夹中。

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Security.Permissions;
using System.Collections.Generic;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

namespace Samples.AspNet.CS.Controls
{
/* 
This code sample creates a Web Part zone and adds the 
"Copy Web Part" verb to any control in the zone.
*/
[AspNetHostingPermission(SecurityAction.Demand,
    Level = AspNetHostingPermissionLevel.Minimal)]
[AspNetHostingPermission(SecurityAction.InheritanceDemand,
    Level = AspNetHostingPermissionLevel.Minimal)]
public class ZoneWithAddedVerb : WebPartZone
{

  protected override void OnCreateVerbs(WebPartVerbsEventArgs e)
  {
    List<WebPartVerb> newVerbs = new List<WebPartVerb>();
    newVerbs.Add(new CopyWebPartVerb(CopyWebPartToNewOne));
    e.Verbs = new WebPartVerbCollection(e.Verbs,newVerbs);
    base.OnCreateVerbs(e);
  }

  void CopyWebPartToNewOne(object sender, WebPartEventArgs e)
  {
    WebPartManager wpmgr = 
      WebPartManager.GetCurrentWebPartManager(Page);
    System.Web.UI.WebControls.WebParts.WebPart wp;
    Type tp = e.WebPart.GetType(); 
    wp = (System.Web.UI.WebControls.WebParts.WebPart)Activator.CreateInstance(tp);   
    wpmgr.AddWebPart(wp, e.WebPart.Zone, e.WebPart.ZoneIndex + 1);
  }
}
  [AspNetHostingPermission(SecurityAction.Demand,
    Level = AspNetHostingPermissionLevel.Minimal)]
  [AspNetHostingPermission(SecurityAction.InheritanceDemand,
    Level = AspNetHostingPermissionLevel.Minimal)]
  internal class CopyWebPartVerb : WebPartVerb
  {
    private const String _copyWebPartImageUrl = "~/CopyVerb.ico";

    internal CopyWebPartVerb(WebPartEventHandler serverClickHandler) :  
       base("MyVerb", serverClickHandler)
    { }
    public override string Text
    {
      get { return "Copy Web Part"; }
      set { ;}
    }
    public override string Description
    {
      get { return "This verb will copy this web part control " +
        "to a new one below"; }
      set { ; }
    }
    public override bool Enabled
    {
      get { return base.Enabled; }
      set { base.Enabled = value; }
    }
    
    public override string ImageUrl
    {
      get { return _copyWebPartImageUrl; }
      set { ; }
    }
  }
}
Imports System.Data
Imports System.Configuration
Imports System.Web
Imports System.Web.Security
Imports System.Security.Permissions
Imports System.Collections.Generic
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Web.UI.WebControls.WebParts
Imports System.Web.UI.HtmlControls

' This code sample creates a Web Part zone and adds the 
' "Copy Web Part" verb to any control in the zone.
Namespace Samples.AspNet.VB.Controls

  <AspNetHostingPermission(SecurityAction.Demand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  <AspNetHostingPermission(SecurityAction.InheritanceDemand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  Public Class ZoneWithAddedVerb
    Inherits WebPartZone

    'public class ExtendedWebPartZoneBase 
    Protected Overrides Sub OnCreateVerbs(ByVal e _
      As WebPartVerbsEventArgs)

      Dim newVerbs As List(Of WebPartVerb) = _
        New List(Of WebPartVerb)
      newVerbs.Add(New CopyWebPartVerb(AddressOf CopyWebPartToNewOne))
      e.Verbs = New WebPartVerbCollection(e.Verbs, newVerbs)
      MyBase.OnCreateVerbs(e)

    End Sub


    Sub CopyWebPartToNewOne(ByVal sender As Object, _
      ByVal e As WebPartEventArgs)

      Dim wpmgr As WebPartManager = _
        WebPartManager.GetCurrentWebPartManager(Page)
      Dim wp As System.Web.UI.WebControls.WebParts.WebPart
      Dim tp As Type = e.WebPart.GetType()
      wp = CType(Activator.CreateInstance(tp), _
        System.Web.UI.WebControls.WebParts.WebPart)
      wpmgr.AddWebPart(wp, e.WebPart.Zone, e.WebPart.ZoneIndex + 1)

    End Sub

  End Class


  <AspNetHostingPermission(SecurityAction.Demand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  <AspNetHostingPermission(SecurityAction.InheritanceDemand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  Friend Class CopyWebPartVerb
    Inherits WebPartVerb
    Private Const _copyWebPartImageUrl As String = "~/CopyVerb.ico"

    Friend Sub New(ByVal serverClickHandler As WebPartEventHandler)
      MyBase.New("MyVerb", serverClickHandler)

    End Sub

    Public Overrides Property [Text]() As String
      Get
        Return "Copy Web Part"
      End Get
      Set(ByVal value As String)
      End Set
    End Property

    Public Overrides Property Description() As String
      Get
        Return "This verb will copy this web part control to a " _
               & "new one below"
      End Get
      Set(ByVal value As String)
      End Set
    End Property

    Public Overrides Property Enabled() As Boolean
      Get
        Return MyBase.Enabled
      End Get
      Set(ByVal value As Boolean)
        MyBase.Enabled = value
      End Set
    End Property
    
    Public Overrides Property ImageUrl() As String
      Get
        Return Me._copyWebPartImageUrl
      End Get
      Set(ByVal value As String)
      End Set
    End Property

  End Class

End Namespace

代码示例的第三部分是承载控件的网页。 请注意,页面顶部附近有一个 Register 指令,用于声明自定义控件的命名空间。 未声明程序集,因为此示例使用动态编译。 自定义 WebPart 控件在自定义区域中声明。 还可以在此区域中声明其他 WebPart 控件,自定义谓词也会添加到其谓词菜单中。

<%@ Page Language="C#" %>
<%@ Register TagPrefix="verbsample" 
    namespace="Samples.AspNet.CS.Controls" %>

<!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>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <asp:WebPartManager ID="WebPartManager1" runat="server" />
    <verbsample:ZoneWithAddedVerb id="ZoneWithAddedVerb1" 
      HeaderText="Zone with Added Verb" runat="server">
        <ZoneTemplate>
           <verbsample:SimpleControl id="SimpleControl1" 
            title="Simple Control" runat="server" /> 
        </ZoneTemplate>
        </verbsample:ZoneWithAddedVerb>
     </form>
</body>
</html>
<%@ Page Language="VB" %>
<%@ Register TagPrefix="verbsample" 
    namespace="Samples.AspNet.VB.Controls" %>

<!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>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <asp:WebPartManager ID="WebPartManager1" runat="server" />
    <verbsample:ZoneWithAddedVerb id="ZoneWithAddedVerb1" 
      HeaderText="Zone with Added Verb" runat="server">
        <ZoneTemplate>
           <verbsample:SimpleControl id="SimpleControl1" 
            title="Simple Control" runat="server" /> 
        </ZoneTemplate>
        </verbsample:ZoneWithAddedVerb>
     </form>
</body>
</html>

在浏览器中加载页面,然后单击自定义 WebPart 控件上的谓词菜单。 复制 Web 部件谓词应可见。 单击谓词,并注意控件的副本已添加到区域。

注解

Web 部件谓词是交互式 UI 元素,通常由按钮或超链接表示,显示在使用 Web 部件控件的页面中。 用户单击谓词以执行 Web 部件控件的常见 UI 操作,例如关闭 WebPart 控件或关闭编辑显示模式 (与控件) 关联的 EditorZone 特殊页面视图。 与 Web 部件控件集一起提供的所有标准谓词都与 Web 部件区域 (WebPartZone、、 EditorZoneCatalogZoneConnectionsZone) 或 Web 部件Part控件 (WebPartGenericWebPartEditorPartCatalogPart) 相关联。

当标准谓词与区域关联时,它们的操作在区域级别应用,并且谓词通常出现在区域的页眉或页脚区域中。 下表列出了常见的区域级谓词并描述了其操作。

区域级谓词 操作
关闭谓词 与继承自 ToolZone 类的区域一起使用。 隐藏区域的 UI,通常将页面返回到其正常浏览模式视图。
应用谓词 与继承自 EditorZoneBase 类的区域一起使用。 应用用户所做的更改。
OK 谓词 与继承自 EditorZoneBase 类的区域一起使用。 具有应用和关闭谓词的组合效果;它应用更改并隐藏区域的 UI。
取消谓词 与继承自 ToolZone 类的区域一起使用。 取消用户所做的任何挂起的更改。
添加谓词 与继承自 CatalogZoneBase 类的区域一起使用。 将用户从控件目录中选择的控件添加到指定 WebPartZone 区域。
配置谓词 与继承自 ConnectionsZone 类的区域一起使用。 打开一个视图,使用户能够配置现有连接。
断开连接谓词 与继承自 ConnectionsZone 类的区域一起使用。 终止两个控件之间的现有连接。

至于与 Part 控件关联的标准谓词,其操作适用于控件本身 (或其子控件) 。 部件控件充当谓词的容器,并管理谓词的呈现。 与部件控件关联的大多数标准谓词要么直接显示在标题栏中,要么显示在标题栏中的下拉谓词菜单中。 这些谓词是直接出现在标题中还是出现在谓词菜单中,由 WebPartVerbRenderMode 属性决定;默认情况下,谓词显示在谓词菜单中。 下表列出了与各种 Part 控件关联的常见谓词,并描述了它们的操作。

部件控件谓词 操作
最小化谓词 显示在区域中包含的 WebPartZoneBase 每个服务器控件的谓词菜单中。 将控件简化为最小表示形式,隐藏其 UI 中除还原谓词之外的所有内容。
还原谓词 显示在区域中包含的 WebPartZoneBase 每个服务器控件的谓词菜单中。 返回一个最小化控件,使其正常大小和视图。
关闭谓词 显示在区域中包含的 WebPartZoneBase 每个服务器控件的谓词菜单中。 关闭控件并将其添加到页面目录,这意味着该控件将从页面中删除,但如果存在设计正确的目录,用户可以重新打开关闭的控件并将其返回到页面。
连接谓词 如果页面处于连接显示模式并且控件可以形成连接,则显示在区域中包含的 WebPartZoneBase 控件的谓词菜单中。 打开连接 UI,以便用户可以在控件之间创建连接。
删除谓词 如果控件以编程方式添加到页面,而不是 () 以持久性格式声明,则显示在区域中包含的 WebPartZoneBase 控件的谓词菜单中。 永久删除控件实例和任何关联的个性化设置数据,以便与关闭的控件不同,已删除的实例永远无法还原到页面。
编辑谓词 如果页面设计为允许编辑控件,并且页面处于编辑显示模式,则显示在区域中包含的 WebPartZoneBase 控件的谓词菜单中。 选择要编辑的控件并打开编辑 UI。
导出谓词 如果控件和应用程序启用了导出,则显示在区域中包含的 WebPartZoneBase 控件的谓词菜单中。 打开一个对话框,使用户能够导出包含控件序列化状态的说明文件。 有关详细信息,请参见 ExportMode 属性。
帮助谓词 如果控件旨在提供帮助文件,则显示在区域中包含的 WebPartZoneBase 控件的谓词菜单中。 启动为 控件提供帮助的页面。

除了 Web 部件控件集提供的标准谓词之外,还可以创建自定义谓词。 创建自定义谓词的常见方案是创建与控件关联的 Part 谓词。 创建这些谓词时,默认情况下,它们将与标准谓词一起显示在谓词菜单上。 创建此类谓词的基本方法是从 WebPartVerb 类继承以创建一个或多个自定义谓词。 然后,创建继承自基类的 WebPart 控件,并将自定义 WebPartVerb 对象添加到 WebPartVerbCollection 集合中。 然后,可以将此集合添加到 Verbs 控件的 集合中,这将导致自定义谓词在运行时自动显示在控件的谓词菜单上。 与标准谓词一样,可以通过编程方式访问控件上的 WebPart 自定义谓词。

Web 部件应用程序可以使用不从 WebPart 类继承的服务器控件,例如自定义控件、用户控件或 ASP.NET 控件。 这些服务器控件(如果添加到区域) WebPartZoneBase 在运行时与 GenericWebPart 对象动态包装,从而使它们能够充当运行时 WebPart 控件。 若要向不从 WebPart 类继承的服务器控件添加自定义谓词,服务器控件必须实现 IWebActionable 接口并重写其 Verbs 属性。

创建谓词时,可以创建两种类型的关联事件处理程序,这些处理程序将在用户单击谓词时运行:服务器端事件处理程序 (在服务器) 上运行的代码,以及客户端事件处理程序 (在客户端浏览器) 中运行的代码。 此外,还可以为谓词定义自定义状态,这是向用户提供视觉提示的有用方法。 例如,可以创建指示已选择谓词的状态,然后在 UI 中提供相应的更改,以通知用户已选择该谓词。 另一个有用的行为是禁用谓词的能力;通过执行此操作,可以阻止用户单击动词,如果这样做有害或无效,具体取决于应用程序的状态。

WebPartVerb 不公开任何唯一的方法;其公开的方法都是基方法的重写。 但是,它包含许多要让开发人员注意的属性。 属性 Checked 指示当前是否选择了谓词。 ClientClickHandlerServerClickHandler 属性引用类中的相应处理程序, (如果客户端和服务器单击事件存在任何) 。 属性 Description 包含描述当用户将鼠标指针放在 UI 中的谓词上时工具提示中谓词的用途的文本。 属性 Enabled 指示谓词的当前状态,该状态确定用户是否可以单击该谓词并执行其操作。 属性 ID 为谓词对象提供唯一 ID。 属性 ImageUrl 包含图像的 URL,该 URL 可用于表示 UI 中的谓词,代替默认呈现 (通常为按钮或超链接) 。 属性 Text 包含直接显示在 UI 中的谓词上的标签文本。 重写 Visible 的属性确定谓词当前是否显示在 UI 中。 谓词通常在 Web 部件应用程序中的不同时间隐藏或禁用;例如,只有在页面上存在适当的控件、设置和显示模式以使这些谓词能够执行有意义的操作时,才会显示专业动词 (,例如编辑谓词和连接谓词) 。

用于处理谓词的其他关键成员包括 WebPartZoneBase.OnCreateVerbs 方法,该方法是一个事件处理程序,可用于对谓词创建过程的自定义处理进行重写,以及 WebPartZoneBase.CreateVerbs 事件。

构造函数

WebPartVerb(String, String)

初始化 WebPartVerb 类的新实例,并将客户端单击事件处理程序与此实例相关联。

WebPartVerb(String, WebPartEventHandler)

初始化 WebPartVerb 类的新实例,并将服务器端单击事件处理程序与此实例相关联。

WebPartVerb(String, WebPartEventHandler, String)

初始化 WebPartVerb 类的新实例,并将客户端和服务器端单击事件处理程序都与此实例相关联。

属性

Checked

获取或设置一个值,该值指示某个与自定义谓词相关联的状态当前是否处于活动状态或被选中。

ClientClickHandler

获取包含客户端事件处理程序的方法名称的字符串,该处理程序在 WebPartVerb 构造函数中定义。

Description

获取或设置谓词的简短说明。

Enabled

获取或设置一个值,该值指示是否启用谓词。

ID

获取包含谓词的唯一 ID 的字符串。

ImageUrl

获取或设置包含一个图像的 URL 的字符串,该图像在用户界面 (UI) 中表示谓词。

IsTrackingViewState

获取一个值,该值指示当前是否正在跟踪谓词的视图状态。

ServerClickHandler

获取对处理谓词服务器端单击事件的方法的引用。

Text

获取或设置显示在用户界面 (UI) 中的谓词的文本标签。

ViewState

获取状态信息的字典,这些信息使您可以在同一页的多个请求间保存和还原服务器控件的视图状态。

Visible

获取或设置一个值,该值指示谓词对用户是否可见。

方法

Equals(Object)

确定指定对象是否等于当前对象。

(继承自 Object)
GetHashCode()

作为默认哈希函数。

(继承自 Object)
GetType()

获取当前实例的 Type

(继承自 Object)
LoadViewState(Object)

从用 SaveViewState() 方法保存的上一个页面请求还原视图状态信息。

MemberwiseClone()

创建当前 Object 的浅表副本。

(继承自 Object)
SaveViewState()

保存自页上次回发给服务器之后所发生的 WebPartVerb 对象的视图状态更改。

ToString()

返回表示当前对象的字符串。

(继承自 Object)
TrackViewState()

跟踪谓词的视图状态更改,以便更改可以存储在谓词的 StateBag 对象中。

显式接口实现

IStateManager.IsTrackingViewState

通过调用 IsTrackingViewState 类的自身的 WebPartVerb 属性,可以实现 IsTrackingViewState 属性。

IStateManager.LoadViewState(Object)

通过调用 LoadViewState(Object) 类自身的 IStateManager 方法,可以实现 WebPartVerb 接口的 LoadViewState(Object) 方法。

IStateManager.SaveViewState()

通过调用 SaveViewState() 类自身的 WebPartVerb 方法,可以实现 SaveViewState() 方法。

IStateManager.TrackViewState()

通过调用 TrackViewState() 类自身的 WebPartVerb 方法,可以实现 TrackViewState() 方法。

适用于

另请参阅