[英]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。
覆盖受保护的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)
{
/ *在这里写我们的代码............. * /
}
覆盖受保护的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.