ASP.NET用户控件缓存造成的BUG一例
2008-01-30 19:08
357 查看
一个UserControl 中使用了缓存,如下:
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="ucIndexBureauMap.ascx.cs"
Inherits="Include_ucIndexBureauMap" %>
<%@ OutputCache Duration="60" VaryByParam="none" %>
在调用这个用户控件的页面里,在对这个uc的visible属性进行调整的时候,会出现“未……引用到实例”的错误。
protected void Page_Load(object sender, EventArgs e)
{
try
{
Page.Title = PageBase.WebName;
//if (!Page.IsPostBack)
{
tgContentList.PageSize = PageBase.ModulePageSize;
labLocation.Text = GetLocation();
strModuleID = Request.QueryString["ModuleID"].ToString();
UcNavBar1.strSelectedModuleID = strModuleID.Substring(0, 4).Replace('A', 'B');
if (strModuleID == "A017001")
{
UcBureauMap1.Visible = true;//在这里会出现错误,UcBureauMap1为空
tgContentList.Visible = false;//这个TableGrid就不会出错
}
else
{
UcBureauMap1.Visible = false;
tgContentList.Visible = true;
BindData();
}
//InitSearchField(strModuleID);
}
}
catch
{
AlertMsn.PopMsn_Close(0, PageBase.M_Error_Bad_Param, false);
}
}
但偶尔一两次进入引用的页面没有这样的问题,但等我再试就又出错了。
这是因为,在UserControl里设置了缓存,而我的页面根据传入的参数ModuleID来返回不同的页面,这两个页面的区别在于一个显示UcBureauMap1而另一个显示tgContentList.所以某时刻访问该页面时缓存了没有UcBureauMap的页面,下次换一个ModuleID参数传入时,缓存的页面中没有UcBureauMap这个对象,于是出错.
取消用户控件的缓存或者设置缓存的 VaryByParam 属性来解决问题。
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="ucIndexBureauMap.ascx.cs"
Inherits="Include_ucIndexBureauMap" %>
<%@ OutputCache Duration="60" VaryByParam="none" %>
在调用这个用户控件的页面里,在对这个uc的visible属性进行调整的时候,会出现“未……引用到实例”的错误。
protected void Page_Load(object sender, EventArgs e)
{
try
{
Page.Title = PageBase.WebName;
//if (!Page.IsPostBack)
{
tgContentList.PageSize = PageBase.ModulePageSize;
labLocation.Text = GetLocation();
strModuleID = Request.QueryString["ModuleID"].ToString();
UcNavBar1.strSelectedModuleID = strModuleID.Substring(0, 4).Replace('A', 'B');
if (strModuleID == "A017001")
{
UcBureauMap1.Visible = true;//在这里会出现错误,UcBureauMap1为空
tgContentList.Visible = false;//这个TableGrid就不会出错
}
else
{
UcBureauMap1.Visible = false;
tgContentList.Visible = true;
BindData();
}
//InitSearchField(strModuleID);
}
}
catch
{
AlertMsn.PopMsn_Close(0, PageBase.M_Error_Bad_Param, false);
}
}
但偶尔一两次进入引用的页面没有这样的问题,但等我再试就又出错了。
这是因为,在UserControl里设置了缓存,而我的页面根据传入的参数ModuleID来返回不同的页面,这两个页面的区别在于一个显示UcBureauMap1而另一个显示tgContentList.所以某时刻访问该页面时缓存了没有UcBureauMap的页面,下次换一个ModuleID参数传入时,缓存的页面中没有UcBureauMap这个对象,于是出错.
取消用户控件的缓存或者设置缓存的 VaryByParam 属性来解决问题。
相关文章推荐
- ASP.Net 更新页面输出缓存的几种方法(包括用户控件,iframe,页面缓存等)
- ASP.NET 页或页中包含的用户控件的输出缓存策略
- ASP.Net 更新页面输出缓存的几种方法(包括用户控件,iframe,页面缓存等)(转)
- ASP.net 用户控件(使用缓存)
- 以用户控件进行asp.net网页的部分缓存
- [转]ASP.NET 缓存(十一)--缓存用户控件输出的多个版本
- [转]ASP.NET 缓存(十二)--根据参数缓存用户控件的多个版本
- [转]ASP.NET 缓存(十三)--通过使用声明性的属性缓存用户控件的多个版本
- ASP.Net 更新页面输出缓存的几种方法(包括用户控件,iframe,页面缓存等)
- ASP.NET缓存:用户控件缓存
- ASP.NET 页或页中包含的用户控件的输出缓存策略
- ASP.Net 更新页面输出缓存的几种方法(包括用户控件,iframe,页面缓存等)
- ASP.Net 更新页面输出缓存的几种方法(包括用户控件,iframe,页面缓存等)
- ASP.Net 更新页面输出缓存的几种方法(包括用户控件,iframe,页面缓存等)
- asp.net中为用户控件添加数据缓存依赖项时要注意的事项
- 解决asp.net中radio button的排他性在DataList控件中失效的BUG
- ASP.NET 独占操作方法,防止用户反复提交造成数据库处理失败
- ASP.NET Temporary ASP.NET Files 缓存 想起的可恶BUG
- ASP.NET 将WEB网页转化为用户控件
- ASP.NET为用户控件添加属性