Используя Класс менеджера по Сборке, чтобы Загрузить Файлы ASPX и Заполнить его Средства управления

Я использую Класс BuildManager для Загрузки динамично сгенерированного Файла ASPX, обратите внимание на то, что он не имеет соответствующего .cs файла.

Использование После кода, я могу загрузить aspx файл, я даже могу циклично выполниться через набор управления динамично созданного aspx файла, но когда я присваиваю значения средствам управления, они не разоблачают его. например, если я связываю значение "Макет" с управлением TextBox aspx страницы, текстовое поле остается пустым.

Вот код, который я использую


protected void Page_Load(object sender, EventArgs e)
    {
        LoadPage("~/Demo.aspx");
    }
    public static void LoadPage(string pagePath)
    {
        // get the compiled type of referenced path
        Type type = BuildManager.GetCompiledType(pagePath);


        // if type is null, could not determine page type
        if (type == null)
            throw new ApplicationException("Page " + pagePath + " not found");

        // cast page object (could also cast an interface instance as well)
        // in this example, ASP220Page is a custom base page
        System.Web.UI.Page pageView = (System.Web.UI.Page)Activator.CreateInstance(type);

        // call page title
        pageView.Title = "Dynamically loaded page...";

        // call custom property of ASP220Page
        //pageView.InternalControls.Add(
        //    new LiteralControl("
Served dynamically...")); // process the request with updated object ((IHttpHandler)pageView).ProcessRequest(HttpContext.Current); LoadDataInDynamicPage(pageView); } private static void LoadDataInDynamicPage(Page prvPage) { foreach (Control ctrl in prvPage.Controls) { //Find Form Control if (ctrl.ID != null) { if (ctrl.ID.Equals("form1")) { AllFormsClass cls = new AllFormsClass(); DataSet ds = cls.GetConditionalData("1"); foreach (Control ctr in ctrl.Controls) { if (ctr is TextBox) { if (ctr.ID.Contains("_M")) { TextBox drpControl = (TextBox)ctr; drpControl.Text = ds.Tables[0].Rows[0][ctr.ID].ToString(); } else if (ctr.ID.Contains("_O")) { TextBox drpControl = (TextBox)ctr; drpControl.Text = ds.Tables[1].Rows[0][ctr.ID].ToString(); } } } } } } }
6
задан Sandhurst 21 March 2010 в 17:53
поделиться

1 ответ

Я видел, что вы получили часть своего кода из Как динамически загружать страницу для обработки . Прочтите также комментарии, такие как один Майка.

Инвертировать это:

((IHttpHandler)pageView).ProcessRequest(HttpContext.Current);
LoadDataInDynamicPage(pageView);

На это:

LoadDataInDynamicPage(pageView);
((IHttpHandler)pageView).ProcessRequest(HttpContext.Current);

В этом случае изменение порядка вызовов действительно меняет конечный результат, я думаю. Обратное к свойству коммутативности . :)

4
ответ дан 17 December 2019 в 07:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: