动态绑定usercontrol中的事件

时间:2010-09-27 20:19:28

标签: asp.net

我试图在运行时将click事件绑定到usercontrol中的按钮。我编写的代码构成了一个计划旧的webform,但事件只是没有在控件中绑定。

这是我的代码。首先是页面:

<%@ 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">   
<html xmlns="http://www.w3.org/1999/xhtml">
<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>

代码背后:

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");
        }
    }
}

控件很简单:

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

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

代码背后:

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");
        }

    }
}

当我运行应用程序时,控件内部的myEvent永远不会被命中,但是当我点击它的按钮时,webform上的myevent被点击。

有人能告诉我如何在用户控件中动态绑定用户控件按钮吗?

1 个答案:

答案 0 :(得分:2)

出于好奇,您是否总是在测试UserControl按钮之前单击“页面”按钮?我注意到,当您没有回发页面时,您只对UC事件进行绑定。

编辑扩展答案:

无论页面回发如何,您都需要修改UserControl以始终绑定事件。