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参数是否相同,所以不用考虑多个页面之间控件的参数值混淆的问题。