【问题】:
自己写好的ascx用户控件,设置了缓存,拖到网页引用,第一次加载没有问题,可以访问用户控件里面的方法;第二此加载的时候用户控件失效。
【原因】:
第一次加载可以直接对用户控件操作,所以程序不报错;第二词加载的时候,用户已经不存在(被缓存了),所以无法直接引用用户控件的方法。
【解决方法】:
网上说:可以使用StaticPartialCachingControl来解决。但是msdn上没有具体的code,郁闷。请大家出手。
我的代码:
---------------------------------
Hashtable hash1 = new Hashtable();//UC中方法1
Hashtable hash2 = new Hashtable();//UC中方法2
Hashtable hash3 = new Hashtable();//UC中方法3 if ((WOS.ASCX.OrderForm)this.FindControl("OrderForm1") != null)//如果不是第一次加载
{
hash1 = ((WOS.ASCX.OrderForm)this.FindControl("OrderForm1")).returnTXTHash();
hash2 = ((WOS.ASCX.OrderForm)this.FindControl("OrderForm1")).returnDDLHash();
hash3 = ((WOS.ASCX.OrderForm)this.FindControl("OrderForm1")).SalesOrderHed();
}
else//从缓存中读取,【这段代码有错误】
{
UCOrderForm=(WOS.ASCX.OrderForm)(StaticPartialCachingControl.BuildCachedControl().CachedControl;
hash1 = UCOrderForm.returnTXTHash();
hash2 = UCOrderForm.returnDDLHash();
hash3 = UCOrderForm.SalesOrderHed();
}
----------------------
感谢大家关注。
自己写好的ascx用户控件,设置了缓存,拖到网页引用,第一次加载没有问题,可以访问用户控件里面的方法;第二此加载的时候用户控件失效。
【原因】:
第一次加载可以直接对用户控件操作,所以程序不报错;第二词加载的时候,用户已经不存在(被缓存了),所以无法直接引用用户控件的方法。
【解决方法】:
网上说:可以使用StaticPartialCachingControl来解决。但是msdn上没有具体的code,郁闷。请大家出手。
我的代码:
---------------------------------
Hashtable hash1 = new Hashtable();//UC中方法1
Hashtable hash2 = new Hashtable();//UC中方法2
Hashtable hash3 = new Hashtable();//UC中方法3 if ((WOS.ASCX.OrderForm)this.FindControl("OrderForm1") != null)//如果不是第一次加载
{
hash1 = ((WOS.ASCX.OrderForm)this.FindControl("OrderForm1")).returnTXTHash();
hash2 = ((WOS.ASCX.OrderForm)this.FindControl("OrderForm1")).returnDDLHash();
hash3 = ((WOS.ASCX.OrderForm)this.FindControl("OrderForm1")).SalesOrderHed();
}
else//从缓存中读取,【这段代码有错误】
{
UCOrderForm=(WOS.ASCX.OrderForm)(StaticPartialCachingControl.BuildCachedControl().CachedControl;
hash1 = UCOrderForm.returnTXTHash();
hash2 = UCOrderForm.returnDDLHash();
hash3 = UCOrderForm.SalesOrderHed();
}
----------------------
感谢大家关注。
解决方案 »
- access的一些小问题
- 关于在前台传SESSION的问题
- 请问RTC API中哪个接口的哪个方法可以得到别人的状态啊
- 做一个COOKIE 验证?
- 『急切盼高手出手』一次新增多条记录,而不是每新增一条就postback保存一次。不知道的顶一下。
- 编辑ASPxGridView某一列的时候需要弹出一个子窗口(也是ASPxGridView)选中某列后怎么返回给父窗口?
- SQL问题
- 一个部署ASP.net应用时的问题?
- 请教个问题,关于水晶报表的。
- (UP了就给分)DataGrid 加入Template Column 如单选按钮
- frameset问题!急!!!!!!!!!!!!!!!!!!!!
- 业余的,做了个网站,大家PP,www.net0735.com
因设计到一些具体的事情,该控件必须静态加载。但是StaticPartialCachingControlFindControl的使用网上都没有例子,它不能象PartialCachingControl一样用。
请您关注。
1。使用动态装载
2。把你的控件设成类似
<%@ OutputCache Duration="5" varybycontrol="txt"%>3。把那些控件里的编码移动到其他类去
/// <summary>
/// 利用工厂模式设置缓存。
/// </summary>
/// <param name="key"></param>
public static System.Data.DataTable setCache(string key)
{
System.Data.DataTable dt=new DataTable();
Type t = Type.GetType("DreamZone.Core.sysCollection");
MethodInfo method = t.GetMethod(key);
dt=(System.Data.DataTable)method.Invoke(null,null);
setCache(key,dt);
return dt;
}
/// <summary>
/// 直接利用key和dt设置。
/// </summary>
/// <param name="key"></param>
/// <param name="dt"></param>
/// <returns></returns>
public static System.Data.DataTable setCache(string key,System.Data.DataTable dt)
{
//HttpContext.Current.Cache.Add(key,dt,null,DateTime.MaxValue,new TimeSpan(0,0,1,0),CacheItemPriority.High,null);
HttpContext.Current.Cache.Add(key,dt,null,DateTime.MaxValue,new TimeSpan(0,0,1,0),CacheItemPriority.High,null);
return dt;
}
/// <summary>
/// 从缓存中获取,如果为空设置缓存
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public static System.Data.DataTable getCache(string key)
{
System.Data.DataTable dt=new DataTable();
if(HttpContext.Current.Cache[key]!=null)
{
dt=(System.Data.DataTable)HttpContext.Current.Cache[key];
}
else
{
dt= setCache(key);
}
return dt;
}
/// <summary>
/// 清空缓存
/// </summary>
/// <param name="key"></param>
public static void clearCache(string key)
{
HttpContext.Current.Cache.Remove(key);
}
#endregion