将网站的 UserControls 转换为可重用的服务器控件,同时保留使用声明性代码的能力的一种据称经过验证的技术使我可以NullReferenceException
对在 ASCX 代码中声明的任何控件进行任何引用。
从同一项目调用 ASCX 时,不会出现此问题。
这个想法是完成控件的声明性代码的按需编译(预编译网站)。应用 aspnet_merge 后,名称笨拙的程序集会收到正常名称,但是,如果这第一步不起作用……简而言之,我做了什么:
- 创建一个网站,添加一个用户控件,添加一个 Literal 并在代码隐藏中设置其文本。测试一下。
- 编译为固定的命名程序集,不可更新
- 获取输出 DLL,将它们添加到另一个网站项目并进行测试。
最后一步在我尝试从该控件(即,在我的例子中的 Page_Load 中)访问声明式初始化控件的任何属性时,给了我空引用异常。
PS:Scott Guthrie在这里解释了同样的技术。