繁体   English   中英

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

[英]Help needed on nested web User Control event in ASP.NET

方案:我的asp网页中有一个嵌套的Web用户控件,并且在子用户控件中有一个按钮。

网页:引用一个称为“插槽”的父控件,该控件会动态加载

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

也许只是我一个人,但我从未见过像这样引用和加载控件。 这是我尝试以这种方式进行的操作(对我有用):

在您的主页中,像这样注册您的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。

在aspx Page.ie:Home.aspx.cs中

覆盖受保护的void OnInit(EventArgs e)

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

私人Button 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);

}

无效Btnclk_TextChanged(对象发送者,EventArgs e)

{

/ *在这里写我们的代码............. * /

 }

在aspx页面中。

覆盖受保护的void OnInit(EventArgs e){InitializeComponent(); base.OnInit(e); }私人Button GetButton(){Button Btn =(Button)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)

{

/ *在这里写我们的代码............. * /

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM