在一个Web站点项目中,如果我在页面或控件的标记中添加对用户控件的引用,如下所示:
<%@ Reference Control="~/controls/myUserControl.ascx" %>
那么我可以通过代码后台使用自动生成的 ASP
命名空间来编程创建该控件的实例:
ASP.controls_myUserControl_ascx myControlInstance =
new ASP.controls_myUserControl_ascx();
然而,在一个Web应用程序项目中,我遇到了编译错误。MSDN的这个评论表明它在Web应用程序项目中无法正常工作,但未提供替代方法。
我可以这样创建用户控件背后存在的类的实例:
MyWebApplication.controls.myUserControl myControlInstance
= new MyWebApplication.controls.myUserControl();
但是这并不包括来自.ascx文件的标记(或任何服务器端控件),所以这没用。
我可以这样实例化一个包括标记的控件:
MyWebApplication.controls.myUserControl myControlInstance
= LoadControl("~/controls/myUserControl.ascx")
as MyWebApplication.controls.myUserControl;
我可以使用LoadControl
方法访问所有属性,看起来效果很好。但是,在Web应用程序项目中,如果可以使用不同项目类型的强类型类,从其字符串路径加载控件似乎有点不好。
因此,我的问题是:是否有更好的方法在Web应用程序项目中以编程方式创建用户控件?或者我只能使用LoadControl
方法了吗?