tags:

views:

19

answers:

1

I am trying to bind a click event to a button within a usercontrol at runtime. The code I have written works form a plan old webform but the event is just not binding with in the control.

Here's my code. First the page:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="myApp._Default" %>
<%@ Register TagPrefix="uc" TagName="UserControl" Src="~/UserControlWithButton.ascx" %>  
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;   
<html xmlns="http://www.w3.org/1999/xhtml"&gt;
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Button ID="Button1" runat="server" Text="Button" />
        <uc:UserControl ID="userControl" runat="server" />
    </div>
    </form>
</body>
</html>

With code behind:

namespace myApp
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Button1.Click += new EventHandler(myevent);
        }

        protected void myevent(object sender, EventArgs e)
        {
            Response.Write("Hi from the page");
        }
    }
}

And the control is simply:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="UserControlWithButton.ascx.cs" Inherits="myApp.UserControlWithButton" %>  

<asp:Button ID="ButtonInsideControl" runat="server" Text="ButtonInsideControl" />

with its code behind :

namespace myApp
{
    public partial class UserControlWithButton : System.Web.UI.UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
                ButtonInsideControl.Click += new EventHandler(myEvent);
        }

        protected void myEvent(object sender, EventArgs e)
        {
            Response.Write("Hi from inside the control");
        }

    }
}

When I run the app the myEvent from inside the control is never hit but myevent on the webform is hit when I click its button.

Can anyone tell me how I can bind the user controls button dynamically from with in the user control?

+2  A: 

Out of curiosity, are you always clicking the Page button before testing the UserControl button? I notice that you're only binding the UC event when the page isn't being posted back.

EDIT for expanded answer:

You'll need to modify the UserControl to always bind the event, regardless of the page posting back.

zincorp
Nothing happens either way. Good spot :)
John Nolan
Ahh removing the if (!Page.isPostBack) has done the job.
John Nolan
If you fancy expanding your answer I'll gladly accept it :)
John Nolan