PlaceHolder多次动态加载自定义控件(每次加载一个且容器内只有一个自定义控件)

lnuyasha_hrb 2009-03-22 02:00:35
问题简单描述下:
目的:
1.实现PlaceHolder动态加载自定义控件;
2.根据测试主页上按钮事件实现动态加载不同的控件;
例:
1.测试主页上有2个按钮控件(Btn1和Btn2)和1个PlaceHolder1控件,点击Btn1加载test_Control1,点击Btn2加载test_Control2;
2.自定义控件test_Control1内有1个Lable1(Lab)控件和一个Button(Btn)控件,点击Btn发生事件,使Lab文本改为测试1成功;
3.自定义控件test_Control2内也有1个Lable1(Lab)控件和一个Button(Btn)控件,点击Btn发生事件,使Lab文本改为测试2成功;

出现问题:
虽然可以实现动态加载控件,当点击Btn1,加载test_Control1成功,然后点击Btn,也成功;当点击Btn2,test_Control2加载成功,但是——当点击Btn时,并没有进入Btn事件

,再次点击Btn才能进入Btn事件,Lab才显示“测试2成功”,也就是说要点2次才能成功

代码:
1.测试主页Default.aspx.cs

protected Control ctl;
string str1;
protected void Page_Load(object sender, EventArgs e)
{
if(IsPostBack)
{
if (Session["System"] != null)
str1 = Session["System"].ToString();
if (ViewState["isLoadControl"] != null && ((bool)ViewState["isLoadControl"]))//再次加载
{
this.ctl = this.LoadControl(str1);//加载控件
this.PlaceHolder1.Controls.Add(this.ctl); //在页面上呈现
}

}

}
protected void Button2_Click(object sender, EventArgs e)
{
BlindHolder("test/test_conntroll.ascx");
}
protected void Button1_Click(object sender, EventArgs e)
{
BlindHolder("test/test_2.ascx");
}

public void BlindHolder(string str)
{
PlaceHolder1.Controls.Clear();
if (this.PlaceHolder1.Controls.Count == 0) //第一次加载
{
this.ctl = this.LoadControl(str);
this.PlaceHolder1.Controls.Add(this.ctl);
}
ViewState["isLoadControl"] = true;
Session["System"] = str;
}

2.test_Control1.ascx.cs自定义控件1代码

protected void Page_Load(object sender, EventArgs e)
{

}
protected void Btn_Click(object sender, EventArgs e)
{
Lab.Text = "测试1成功!";
}

3.test_Control2.ascx.cs自定义控件2代码

protected void Page_Load(object sender, EventArgs e)
{

}
protected void Btn_Click(object sender, EventArgs e)
{
Lab.Text = "测试2成功!";
}


在此先感谢大家了,最好能给我发邮件,或QQ带上源码,嘿嘿,这样有附加分的,
E-Mail:liu.jinshan@hotmail.com
QQ:99197533
...全文
174 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lnuyasha_hrb 2009-03-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wuyq11 的回复:]
protected void btnLoadUserControl_Click(object sender, EventArgs e)
{
Button btn1 = new Button();
btn1.Text = "显示出来,";
PlaceHolder2.Controls.Add(btn1);
btn1.Text += "显示容器的ID";
}
[/Quote]

答案不正确
wuyq11 2009-03-22
  • 打赏
  • 举报
回复
protected void btnLoadUserControl_Click(object sender, EventArgs e)
{
Button btn1 = new Button();
btn1.Text = "显示出来,";
PlaceHolder2.Controls.Add(btn1);
btn1.Text += "显示容器的ID";
}

62,267

社区成员

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

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

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

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