Загрузка пользовательского элемента управления динамически - PullRequest
1 голос
/ 06 октября 2011

У меня есть код как показано ниже

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

    }

Митод в основном копирует пользовательские элементы управления в виртуальный путь при запускевремя.

На странице aspx.cs я пытаюсь загрузить его динамически.

Но я вижу, что файл копируется в виртуальный путь, но это.Управление загрузкой дает мне исключение, говоря, что не удалось загрузить тип «myCustomUserControl».

Я использую веб-роль Azure
Что здесь не так?

1 Ответ

1 голос
/ 06 октября 2011

Я решил ошибку.Я просто добавляю сюда, чтобы кто-нибудь мог ссылаться.

Это изменение одним словом -

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

Изменение

CodeBehind = "myCustomUserControl.ascx.cs "

до

CodeFile =" myCustomUserControl.ascx.cs "

Благодаря @Roopesh & @Kristoffer Brinch Kjeldby

и он запуститсяработа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...