2009年01月6日
Asp.net用户控件+缓存=Null
在Asp.net中做一个用户控件ascx页面,其中定义一个Public的属性,比如PageID,在aspx页面中放入这个用户控件,给它分配一个ID,比如MyControl,然后在cs页面中给这个用户控件的这个属性赋值,MyControl.PageID=1;这是非常通用的而且常见的作法。
但是假如这个时候给这个用户控件加一个输出缓存
<%@ OutputCache Duration="600" VaryByParam="*"%>
这个aspx页面就会报错,当控件被缓存以后,页面里将得不到MyControl对象,该对象始终为Null。
解决方法:赋值前判断一下MyControl!=null就行了。因为控件的缓存本身会判断URL参数是否相同,所以不用考虑多个页面之间控件的参数值混淆的问题。