BubbleClickPlaceHolder klassen, som blot er en PlaceHolder som definerer en event BubbleClick som fyres af når der klikkes på en Button inde i PlaceHolderen:
using System;
using System.Web.UI.WebControls;
namespace BubbleTest
{
/// <summary>
/// Summary description for BubbleClickPlaceHolder
/// </summary>
public class BubbleClickPlaceHolder : PlaceHolder
{
public event EventHandler BubbleClick;
protected override bool OnBubbleEvent(object source, EventArgs args)
{
if (source is Button && BubbleClick != null)
{
BubbleClick(source, args);
}
return base.OnBubbleEvent(source, args);
}
}
}
Eksempletes markup
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@ Register TagPrefix="bubble" Namespace="BubbleTest" %>
<!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">
<div>
<bubble:BubbleClickPlaceHolder runat="server" OnBubbleClick="Button_Click" ID="placeHolder">
<asp:Button ID="button1" runat="server" Text="1" />
<asp:Button ID="button2" runat="server" Text="2" />
<asp:Button ID="button3" runat="server" Text="3" />
</bubble:BubbleClickPlaceHolder>
</div>
</form>
</body>
</html>
Og endelig code-behind for eksemplet:
public partial class _Default : System.Web.UI.Page
{
protected virtual void Button_Click(object sender, EventArgs e)
{
if (sender is Button)
Response.Write("You clicked a button with Text=" + ((Button)sender).Text);
}
}
Samme øvelse kan selvfølgelig udføres med andre events, f.eks. er det oplagt at køre det med Command, idet du så kan bruge CommandArgument til at overføre et-eller-andet argument til din handler. For at holde eksemplet simpelt har jeg dog holdt mig til Click eventet. Eneste forskel er at du vil være nødt at kaste args til en CommandEventArgs i din OnBubbleEvent metode.