使用构建管理器类加载 ASPX 文件并填充其控件

Posted

技术标签:

【中文标题】使用构建管理器类加载 ASPX 文件并填充其控件【英文标题】:Using Build Manager Class to Load ASPX Files and Populate its Controls 【发布时间】:2010-03-21 17:53:25 【问题描述】:

我正在使用 BuildManager 类加载一个动态生成的 ASPX 文件,请注意它没有对应的 .cs 文件。

使用以下代码,我可以加载 aspx 文件,甚至可以遍历动态创建的 aspx 文件的控件集合,但是当我为控件分配值时,它们没有显示出来。例如,如果我将值“Dummy”绑定到 aspx 页面的 TextBox 控件,则文本框保持为空。

这是我正在使用的代码

protected void Page_Load(object sender, EventArgs e) LoadPage("~/Demo.aspx"); 公共静态无效LoadPage(字符串pagePath) // 获取引用路径的编译类型 类型类型 = BuildManager.GetCompiledType(pagePath); // 如果 type 为 null,则无法确定页面类型 如果(类型 == 空) throw new ApplicationException("Page" + pagePath + "not found"); // 转换页面对象(也可以转换接口实例) // 在这个例子中,ASP220Page 是一个自定义的基本页面 System.Web.UI.Page pageView = (System.Web.UI.Page)Activator.CreateInstance(type); // 调用页面标题 pageView.Title = "动态加载页面..."; // 调用 ASP220Page 的自定义属性 //pageView.InternalControls.Add( // new LiteralControl("
动态服务...")); // 处理带有更新对象的请求 ((IHttpHandler)pageView).ProcessRequest(HttpContext.Current); LoadDataInDynamicPage(pageView); 私有静态无效LoadDataInDynamicPage(页面prvPage) foreach(prvPage.Controls 中的控制 ctrl) //查找表单控件 如果(ctrl.ID != null) if (ctrl.ID.Equals("form1")) AllFormsClass cls = new AllFormsClass(); 数据集 ds = cls.GetConditionalData("1"); foreach(在 ctrl.Controls 中控制 ctr) 如果(ctr 是文本框) if (ctr.ID.Contains("_M")) 文本框 drpControl = (文本框)ctr; drpControl.Text = ds.Tables[0].Rows[0][ctr.ID].ToString(); 否则 if (ctr.ID.Contains("_O")) 文本框 drpControl = (文本框)ctr; drpControl.Text = ds.Tables[1].Rows[0][ctr.ID].ToString();

【问题讨论】:

【参考方案1】:

我看到您从How To Dynamically Load A Page For Processing 获得了部分代码。也请阅读 cmets,就像 Mike 的 one。

反转这个:

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

到这里:

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

在这种情况下,更改调用顺序确实会改变我认为的最终结果。 Commutativity property 的倒数。 :)

【讨论】:

以上是关于使用构建管理器类加载 ASPX 文件并填充其控件的主要内容,如果未能解决你的问题,请参考以下文章

从 wpf 中的文件路径列表填充树视图

使用 IIS 关闭文件夹浏览

当我将WPF UserControl用于其内置项目以外的项目时,我的WPF UserControl无法找到资源

如何从Windows资源管理器中打开文件并将其加载到RTF控件中?

ajax悬停菜单扩展器控件的问题

Windows 的声音管理器类