思路话语

。Arlen:思想有多远你就能走多远...

动态加载用户控件的一点心得

1.功能目标:
a.在下拉列表中选择项,加载相应用户控件。
b.试验动态加载用户控件。
2.布局:
页面中一个DropDownList(ddlType)
一个PlaceHolder(ph)
3.代码:

private string MyUCType
        
{
            
get
            
{
                
if(ViewState["MyUCType"!= null)
                
{
                    
return ViewState["MyUCType"].ToString();
                }

                
else
                
{
                    
return "补录设备";
                }

            }

            
set
            
{
                ViewState[
"MyUCType"= value;
            }

        }

private void Page_Load(object sender, System.EventArgs e)
  {
   // 在此处放置用户代码以初始化页面   
   AddUC();
  }

private void ddlType_SelectedIndexChanged(object sender, System.EventArgs e)
  {
   MyUCType = ddlType.SelectedValue;
   AddUC();
  }

private void AddUC()
        
{            
            
if(ph.FindControl("uc1"!= null)
            
{                
                ph.Controls.Remove(ph.FindControl(
"uc1"));
            }

            
if(MyUCType == "补录设备")
            
{                

                UserControl.TemplateAddDevice uc 
= (UserControl.TemplateAddDevice)LoadControl("../UserControl/TemplateAddDevice.ascx");
                uc.ID 
= "uc1";                
                ph.Controls.Add(uc);

            }

            
else if(MyUCType == "硬件升级")
            
{                

                UserControl.TemplateHardwareUpgrade uc 
= (UserControl.TemplateHardwareUpgrade)LoadControl("../UserControl/TemplateHardwareUpgrade.ascx");
                uc.ID 
= "uc1";                
                ph.Controls.Add(uc);
            }
            
        }

4.要注意:
a.如果在PostBack后不调用AddUC()加载用户控件的话,当你点击用户控件里的按钮(或者其它引起回传的操作)之后,用户控件在页面中就会消失。
b.通过这种方式加载的用户控件会引起的问题:
  如果你在 用户控件里的Page_Load里写了代码的话,除了页面Load里加载的第一个用户控件会执行外,你之后选择的用户控件将不会执行其自身的Page_Load里的代码。这一点一定要注意。
  解决办法:将本来写在用户控件里的Page_Load里的代码写到一个公用方法里面,然后在加载用户控件的时候调用该方法。
不知道还有其它方法不?
请各位指教。

posted on 2007-01-23 15:25  Arlen  阅读(529)  评论(0编辑  收藏  举报

导航