2011-10-06 6 views
1

나는 GetCustomUserControlName의 정의는로드 사용자 정의 컨트롤을 동적으로

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); 

아래로 내 코드가 실행에서 가상 경로에 mithod는 기본적으로 복사 사용자 컨트롤을

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; 
     } 

    } 

아래로 시각 .

aspx.cs 페이지에서 동적으로로드하려고합니다.

하지만 파일이 가상 경로로 복사되는 것을 볼 수 있습니다. 로드 제어에서 'myCustomUserControl'유형을로드 할 수 없다는 예외가 발생합니다.

하늘색 웹 역할
무엇이 잘못 되었나요?

답변

1

나는 버그를 해결했다. 나는 누구든지 참조하도록 여기에두고있다.

http://blog.kjeldby.dk/2008/11/dynamic-compilation-in-a-web-application/

변경

코드 숨김 = "myCustomUserControl.ascx.cs"

CodeFile = "myCustomUserControl.ascx.cs -

그것은 하나 개의 단어 변화의 "

감사합니다. @Roopesh & @Kristoffer Brinch Kjeldby

으로 변경됩니다.

관련 문제