【发布时间】:2012-04-04 21:19:19
【问题描述】:
我正在尝试编写一个方法来动态加载给定页面的控件集合,以便我可以遍历它并创建驻留在页面上的某些类型的控件的列表。这个想法是,对于从特定页面类继承的任何页面,我想编译一个具有某些属性的可编辑字段列表。这一切都发生在这些页面之外(在允许用户管理这些其他页面的不同页面上)。
我尝试了以下两种情况:
BasePage page = (BasePage)System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(string.Format("~/Pages/{0}/Manage.aspx", type.ToString()), typeof(BasePage));
IHttpHandler handler = PageParser.GetCompiledPageInstance(string.Format("~/Pages/{0}/Manage.aspx", type.ToString()), Context.Server.MapPath(string.Format("~/Pages/{0}/Manage.aspx", type.ToString())), HttpContext.Current);
BasePage page = handler as BasePage;
在这两种情况下,页面变量都已启动,但控件集合为空白,可能是因为这两种方法都只加载代码隐藏而不是标记。如何动态加载页面的控件集合?
【问题讨论】:
-
为什么不能将字段放在用户控件中并从页面 A 和页面 B 访问?您应该无法实例化页面的控件集合,直到它经历了完整的请求生命周期,这与仅实例化该页面的实例不同 - 您可能会发现通过 UserControls 子类化您的字段更容易(您可以使用 Page.LoadControl 动态加载)