ASP.NET中嵌套Web用户控件事件所需的帮助

时间:2009-04-05 10:15:41

标签: asp.net user-controls

场景:我的asp网页中有一个嵌套的Web用户控件,我在子用户控件中有一个按钮。

网页:引用一个名为“slot”的父控件,它动态加载

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Home.aspx.cs" 
 Inherits="light.Home" %>

<%@ Reference Control="~/UserControl/Slot.ascx" %>

父用户控件:引用名为“ray”的子控件,它也动态加载

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="Slot.ascx.cs"    
 Inherits="light.Slot" %>

<%@ Reference Control="~/UserControl/Ray.ascx" %>

子用户控件:有一个名为“ButtonRay”的按钮,我想让它在点击事件中运行。

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="Ray.ascx.cs" 
 Inherits="light.Ray" %>

<div id="AddRay" runat="server">

<asp:Button ID="ButtonRay" runat="server" Text="Ray" 
onclick="ButtonRay_Click"/>


</div>

问题:该按钮不会从服务器端触发其点击事件(ButtonRay_Click)

protected void ButtonComment_Click(object sender, EventArgs e)
{
    // this the code that i want to be executed
}

3 个答案:

答案 0 :(得分:1)

也许这只是我,但我从未见过像这样引用和加载的控件。这是我尝试这样做的方式(对我有用):

在您的主页中,像这样注册您的Slot控件,而不是像之前那样引用它:

<%@ Register TagName="Slot" TagPrefix="cc" Src="~/Slot.ascx" %>

然后使用以下命令将控件添加到您的页面中:

<cc:Slot ID="SlotControl" runat="server" />

现在在Slot.ascx中,注册并包含Ray控件:

<%@ Register TagName="Ray" TagPrefix="cc" Src="~/Ray.ascx" %>

<cc:Ray ID="RayControl" runat="server" />

现在在你的Ray控件中,添加你的按钮:

<asp:Button ID="ButtonRay" Text="Ray" OnClick="ButtonRay_OnClick" runat="server" />

在Ray.ascx.cs代码隐藏中,添加事件处理程序:

protected void ButtonRay_OnClick(object sender, EventArgs e)
{

}

当我在此方法上添加断点时,运行应用程序,然后单击按钮,OnClick事件就像它应该被捕获一样。我认为正在发生的事情是仅仅引用你的控件并不会将事件连接起来。如果您动态加载控件,则必须使用Page.LoadControl()以便正确连接。

如果您需要更多解释,请告诉我。

修改

我刚注意到你的按钮点击方法名称与你要求它调用的名称不同:你有ButtonRay按钮执行ButtonRay_Click,但你的方法名称是ButtonComment_Click。

答案 1 :(得分:0)

在aspx Page.ie:Home.aspx.cs

覆盖protected void OnInit(EventArgs e)

{
    InitializeComponent();
    base.OnInit(e);
}

私人按钮GetButton()

{


    Button Btn = (Button)SlotControl.FindControl("RayControl").FindControl("ButtonRay");
    return Btn;
}



private void InitializeComponent()
{


    /*   For button Event Initialization */

    Button Btnclk = GetButton();

    Btnclk.Click += new EventHandler(Btnclk_TextChanged);

}

void Btnclk_TextChanged(object sender,EventArgs e)

{

/ *在这里写下你的代码............. * /

 }

答案 2 :(得分:-1)

在aspx中。

覆盖protected void OnInit(EventArgs e)     {         的InitializeComponent();         base.OnInit(E);     }  私人按钮GetButton()     {         按钮Btn =(按钮)SlotControl.FindControl(“RayControl”)。FindControl(“ButtonRay”);         返回Btn;     }     private void InitializeComponent()     {         / *对于按钮事件初始化* /

    Button Btnclk = GetButton();

    Btnclk.Click += new EventHandler(Btnclk_TextChanged);

}  void Btnclk_TextChanged(object sender,EventArgs e)

{

/ *在这里写下你的代码............. * /

}