动态加载用户控件

动态加载用户控件

第一步,在你的程序里添加一个用户控件,例如Login.ascx

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Login.ascx.cs" Inherits="Sample_ViewState.Controls.Login" %>

第二步,将你的Mater页或者Aspx页调整到设计视图,直接用鼠标将用户控件从右侧的解决方案资源管理器中拖到你的mater页或者Aspx页。在你的master或者Aspx页的源视图会自动生成两段段代码

第一段

<%@ Register src="Controls/Login.ascx" tagname="Login" tagprefix="uc1" %>

第二段

  <uc1:Login ID="Login1" runat="server" />

第三步,删除第二步中的第二段代码。在你的master页或者Aspx页你需要动态加载用户控件的地方添加一个div

 <div  id="tdpan" runat="server" 
        style="width:817px; height:200px; overflow:hidden; float:left">
     </div>

第四步,在你的mater页或者Aspx页的后台代码中,你需要动态加载用户控件的地方,写下如下代码,实现动态加载。比如我想在aspx页点击一个按钮来动态加载用户控件,我的代码是:

  protected void Button1_Click(object sender, EventArgs e)
        {
            UserControl myusercontrol = (UserControl)LoadControl("/Controls/Login.ascx");
            Type myusertype = myusercontrol.GetType();
            tdpan.Controls.Add(myusercontrol);
        }

Ok~

 

注意:动态加载用户控件,你会很奇怪的发现,在用户控件中的IsPostBack突然“不好使”了。比如在Page_Load方法里绑定所有数据,在用户控件里按某一个条件查询,你会发现,Page_Load在IsPostBack中重新绑定了你所有的数据,然后才按你的条件去在查询数据库在绑定。这简直无法忍受。

查询MSDN我们知道 userControl.IsPostBack  如果是正为响应客户端回发而加载用户控件,则为 true;若果是第一次加载或访问用户控件则为 false。
我们现在是动态加载,即正为响应客户端回发而加载用户控件,永远都是true。解决这个问题,需要我们动脑筋了,比如加一些变量来控制。

希望大家有更好的解决方法。

Master页,Aspx页,Ascx页的Page_Load的执行顺序:Aspx页-->Master页-->Ascx页。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值