2011-10-06 90 views
1

我有代码如下加载用户控制动态

string[] keys = { "myCustomUserControl.ascx", "myCustomUserControl.ascx.cs", "myCustomUserControl.ascx.designer.cs" }; 

      string customUserControlName = CommonDataCalls.GetCustomUserControlName(keys); 

      UserControl objUserControl = (UserControl)this.LoadControl("~/UserControls/" + userControlName); 
      userControlPlaceHolder.Controls.Add(objUserControl); 

GetCustomUserControlName的定义如下

public string GetCustomUserControlName(string[] keys) 
    { 
     try 
     { 
      string userConrolsPhysicalPtah = System.Web.HttpContext.Current.Server.MapPath("~/UserControls/"); 
      DataTable objDataTable = new DataTable(); 
      foreach (string key in keys) 
      { 
       objRequestVO.addObject("ACA_KEY", key); 
       CResponseVO objResponseVO = (CResponseVO)objGateway.ExecuteBusinessService(CConstant.ADMIN, CConstant.ASSEMBLY_INFO, CConstant.SELECT, objRequestVO); 
       DataSet objDataSet = (DataSet)objResponseVO.getObject("RES_DS"); 
       cUserTrce objGeneral = new cUserTrce(); 
       if (!objGeneral.IsNullOrEmptyDataset(objDataSet)) 
       { 
        if (objDataTable.Rows.Count == 0) 
        { 
         objDataTable = objDataSet.Tables[0].Clone(); 
        } 
        objDataTable.Rows.Add(objDataSet.Tables[0].Rows[0].ItemArray); 
       } 
      } 

      if (objDataTable != null && objDataTable.Rows.Count == 3) 
      {     
       string containerName = "usercontrols"; 
       foreach (DataRow dr in objDataTable.Rows) 
       { 
        string userControlFileBlobUrl = dr["ACA_ASSEMBLY_PATH"].ToString(); 
        string userControlFileName = dr["ACA_CLASS_NAME"].ToString(); 

        Storage.Blob blobHandler = new Storage.Blob(); 
        Stream blobstream = blobHandler.GetBlob(userControlFileBlobUrl, containerName); 
        if (!(File.Exists(userConrolsPhysicalPtah + userControlFileName))) 
        { 
         MemoryStream ms = (MemoryStream)blobstream; 
         FileStream outStream = File.OpenWrite(userConrolsPhysicalPtah + userControlFileName); 
         ms.WriteTo(outStream); 
         outStream.Flush(); 
         outStream.Close(); 
        } 
       } 



       string customUserControlName = (from DataRow row in objDataTable.Rows 
               where row["ACA_KEY"].ToString() == keys[0] 
               select row["ACA_CLASS_NAME"].ToString()).First(); 

       return customUserControlName; 
      } 

      else 
      { 
       return null; 
      } 
     } 
     catch 
     { 
      return null; 
     } 

    } 

的mithod基本上复制用户控制,以在运行虚拟路径时间 。

在aspx.cs页面中,我尝试动态加载它。

但我可以看到该文件正在复制到虚拟路径,但这。负载控制给我例外说无法加载类型'myCustomUserControl'。

我正在使用azure web角色
这里有什么问题?

回答