动态加载自定义控件中事件触发的问题

ieooo 2005-08-11 11:03:14
我在A.aspx页面中动态加载B.ascx控件。
在B.ascx控件中有一个Button,并且有Button_Click事件,
现在的问题是,我一点击Button,
页面会先执行A.aspx页面的Page_Load里面的内容,
执行完之后并不会加载B.ascx页面,所以也就不会执行B.ascx的Button_Click事件。
请问,应该怎样才能在动态加载的自定义控件中触发具体控件的事件?
...全文
225 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
cityhunter172 2005-08-12
  • 打赏
  • 举报
回复
解决方案:

WebB.ascx 就包含一个 Btn 按钮事件,没什么好说的

private void Btn_Click(object sender, System.EventArgs e)
{
this.Label1.Text="你点击的是 WebB.ascx 中的按钮 Btn !!";
}


关键是 WebA.aspx

1、在 WebA.cs 加入一个变量 protected WebB ctl;

2、编写 Page_Load 事件
private void Page_Load(object sender, System.EventArgs e)
{
if(IsPostBack)
{
//ViewState["isLoadControl"] 表示页面有无加载过 WebB.ascx
//之前倘若加载过 WebB.ascx 则必须运行下列语句
if(ViewState["isLoadControl"] != null && ((bool)ViewState["isLoadControl"]))
{
this.ctl = (WebB) this.LoadControl("WebB.ascx");//加载控件
this.PlaceHolder1.Controls.Add(this.ctl); //在页面上呈现
}
}
}

3、编写按钮事件
private void Button1_Click(object sender, System.EventArgs e)
{
if(this.PlaceHolder1.Controls.Count==0) //第一次加载 WebB.ascx
{
this.ctl = (WebB) this.LoadControl("WebB.ascx");
this.PlaceHolder1.Controls.Add(this.ctl);
}
Button B =(Button) this.ctl.FindControl("Btn");
B.Text ="小样,你想干啥????";
ViewState["isLoadControl"] = true;
this.Label1.Text="自定义控件修改成功!!!!";
}

private void Button2_Click(object sender, System.EventArgs e)
{
//你可以首先点击 Button2 再点 Button1,没人会说你
this.Label1.Text="Button2 提交成功!!";
}
ieooo 2005-08-12
  • 打赏
  • 举报
回复
看起来有点麻烦,换种方法试试看。
感谢 cityhunter172(寒羽枫) 及各位兄弟。
cityhunter172 2005-08-11
  • 打赏
  • 举报
回复
不要这么吝啬嘛,才 30 分

多加点,我告诉你,嘿嘿

我有源码,在新项目中刚刚写的
caojinrong 2005-08-11
  • 打赏
  • 举报
回复
我只想动态加载自定义控件,试了好多天,发现根本不行.
  • 打赏
  • 举报
回复
重新加载没任何意义,
因为之前的点击Button的状态已经不复存在了。
--------------------------------------------
为什么不复存在了?
ieooo 2005-08-11
  • 打赏
  • 举报
回复
重新加载没任何意义,
因为之前的点击Button的状态已经不复存在了。
  • 打赏
  • 举报
回复
执行完之后并不会加载B.ascx页面
--------------------------------
你加载它呀。
jimu8130 2005-08-11
  • 打赏
  • 举报
回复
学习
十七郎 2005-08-11
  • 打赏
  • 举报
回复
关注,那如何来解决这个问题呢
ieooo 2005-08-11
  • 打赏
  • 举报
回复
整个过程是这样的:
1. A 中有一Button,点击该Button,A 页面加载 B;
2. 点击B 中的Button, 跟踪调试步骤显示, -> (A)Page_Load -> 显示未加载B的A页面
3. 再点击A 的Button,才会加载B。
所以,B是重新加载的,之前的状态没有了。
ieooo 2005-08-11
  • 打赏
  • 举报
回复
回答出来再加30分。呵呵

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧