用户控件动态加载PostBack后的问题事件丢失问题

很多网友在按钮的click事件中动态添加用户控件在页面回传后消失了或者就是用户控件中的按钮事件不能触发,下面是解决办法:
(1)
首先添加一个用户控件:WebUserControl1.ascx
添加一个按钮:public System.Web.UI.WebControls.Button ucb;Text为"用户控件的按钮"(等会要在Page中用到这个按钮,所以设置为public)
<asp:Button id="ucb" Text="用户控件的按钮" runat="server"></asp:Button>
为按钮的click事件添加代码:
Response.Write(i.ToString());
i++;
在类中申明static int i=0;
这样通过点击按钮可以看到点击一次,计数增加1
(2)
添加一个页面
放置一个PlaceHolder,两个按钮
<asp:PlaceHolder id="PlaceHolder1" runat="server"></asp:PlaceHolder>
<asp:Button id="Button1" runat="server" Text="加载用户控件"></asp:Button>
<asp:Button id="Button2" runat="server" Text="获取用户控件中的值"></asp:Button>
添加一个加载用户控件的操作:
private void adduc()
  {
   WebUserControl1 uc=(WebUserControl1)Page.LoadControl("WebUserControl1.ascx");
   uc.ID="uc";
   this.PlaceHolder1.Controls.Add(uc);
  }
为第一个按钮增加click事件:
 private void Button1_Click(object sender, System.EventArgs e)
  {
   if(ViewState["adduc"]==null)
   {
    adduc();
    ViewState["adduc"]=1;
   }
  }
我们在视图状态中增加一个标志位,表示是否点击了按钮来加载用户控件,当然如果已经加载了再点击按钮就不需要重复加载了。
关键的是需要在Page.IsPostBack的时候也要加载用户控件
(因为如果不这么做的话,回传的时候用户控件就消失了)
if(Page.IsPostBack)
   {
    if(ViewState["adduc"]!=null)
    {
     adduc();
    }
   }
下面可以点击Button1试验一下,是不是加载了用户控件?同时再点击用户控件中的按钮也能很好的触发其事件。
再为Button2添加click事件,用来读取用户控件中btn这个按钮的标题,动态加载的用户控件和设计时加载的用户控件一样也能很好的和页面进行交互:
private void Button2_Click(object sender, System.EventArgs e)
  {
   if(ViewState["adduc"]!=null)
   {
    Response.Write(((WebUserControl1)Page.FindControl("uc")).ucb.Text);
   }   
  }
这里注意到在加载用户控件的时候我们为之指定了id,能够方便的通过FindControl来找到

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值