asp.net ajax repeater 嵌套 引发 超时

超时时间已到。超时时间已到,但是尚未从连接池获取连接。 出现这种情况可能是因为所有池的连接均在使用,并且达到了最大池大小。 昨天做一个异常处理的小例子,采用ASP.NET AJAX 技术,功能上实现 Repeater 嵌套 Repeater ,最外层Repeater 显示时间段,里层的Repeater 显示该时间段的异常。 做完之后,测试一下,一切正常。 最外层Repeater 只有6条数据,里层Repeater 对于外层的Repeater 都有4条数据,页面分了3页,采用自定义分页。 效果还不错,但是反复点击分页,就报了以上的错误,轻微关掉VS,重新打开再运行就可,严重的注销之后,重新运行 仍然报上面的错误。 我首先就给错误下了一个定义:滥用AJAX,只要不反复点击就没有问题了。 过了 一天,因外其他原因还要打开这个项目,还是出现以前的情况,实在是心有不干 。 然后用 Gridview 做了同样的一个例子,采用自带的分页,同样反复的请求,但是却没有出现这样的情况。 为什么没有呢 ? 难道是分页 有问题,我把分页注释掉,只是绑定,重新运行,仍然报那个错误,这个错误持续时间也太长了。 突然看到了一行代码;repErrors_ItemDataBound ,想到了问题的所在 将里面的代码注释掉之后,一切正常了。 原来是 嵌套Repeater 搞的鬼。 if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { HtmlInputHidden hi = (HtmlInputHidden)e.Item.FindControl("Hidden1"); Repeater rep = (Repeater)e.Item.FindControl("repErrorinfo"); rep.DataSource = ers.GetErrorInfo(Int32.Parse(hi.Value)); rep.DataBind(); } 这是我以前的代码,GetErrorInfo 是一个方法,根据传递的 外层ID,从数据库查找 里层的信息。 但是这样做的话,每次绑定都会 连接一次数据库 。难怪 服务器吃不消呢 ? 都是我的错。 重新修改了一下代码,就好了。OK ! if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { HtmlInputHidden hi = (HtmlInputHidden)e.Item.FindControl("Hidden1"); Repeater rep = (Repeater)e.Item.FindControl("repErrorinfo"); DataSet ds = null; if (Cache["Repds"] != null) { ds = (DataSet)Cache["Repds"]; } else { Cache.Insert("Repds", (DataSet)ers.GetErrorInfo()); ds = (DataSet)Cache["Repds"]; } rep.DataSource = ers.GetErrorInforep(ds, Int32.Parse(hi.Value)); rep.DataBind(); } ===============

posted on 2007-11-28 13:48 top15from_old1 阅读(...) 评论(...) 编辑 收藏

导航

公告

随州简爱保罗定制衣柜专卖店为您准备了全套家装所需的定制家具,用工厂直销的价格和衣柜行业领导品牌的实力恭候您的光临。 随州市清河路清河丽景大门右侧18307228966 0722-3594778