WebPartZoneBase.CreateVerbs Event

Definition

Occurs when the verbs are created for a zone that derives from the WebPartZoneBase class.

public:
 event System::Web::UI::WebControls::WebParts::WebPartVerbsEventHandler ^ CreateVerbs;
public event System.Web.UI.WebControls.WebParts.WebPartVerbsEventHandler CreateVerbs;
member this.CreateVerbs : System.Web.UI.WebControls.WebParts.WebPartVerbsEventHandler 
Public Custom Event CreateVerbs As WebPartVerbsEventHandler 

Event Type

Examples

The following code example demonstrates a way to create a handler for the CreateVerbs event by overriding the OnCreateVerbs method to add a custom verb to a derived WebPartZoneBase zone.

The code example contains two source files. For the code example to run, you must compile this source code. You can compile it explicitly and put the resulting assembly in your Web site's Bin folder or the global assembly cache. Alternatively, you can put the source code in your site's App_Code folder, where it will be dynamically compiled at run time. This code example uses dynamic compilation. For a walkthrough that demonstrates how to compile, see Walkthrough: Developing and Using a Custom Web Server Control.

The first part of the code example is the source code for a simple control derived from the WebPart class.

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

The second part of the code example is the source code for a derived WebPartZoneBase zone that overrides the OnCreateVerbs method to add a custom verb to the zone. The code also creates a custom verb that appears in the verbs menu of WebPart controls contained in the zone, and the verb creates another copy of the current WebPart control.

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

The third part of the code example is a Web page that hosts the derived zone and WebPart control. Near the top of the page is a Register directive to reference the derived zone component. If you load the page in a browser, the WebPart control appears in the zone. Click the verbs menu, then click the CopyWebPart verb, and it creates a copy of the control.

<%@ 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>

Remarks

Page developers can add a handler to this event, and attach additional custom verbs to a WebPartZoneBase child zone.

The CreateVerbs event is raised when the verbs are created for a zone, which happens either during the PreRender stage of page processing, or during postback events.

Applies to

See also