场景:我的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
}
答案 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)
覆盖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)
覆盖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)
{
/ *在这里写下你的代码............. * /
}