遇到一个小小的问题,纠结了半天,记录一下。
做了一个小webpart,很小很简单的一个功能,读取列表然后在前台显示出来,刚得到需求时很不屑.......报应就是浪费了我半天的时间....
因为要读取的列表位置不固定,所以需要在webpart的属性部分添加一些自定义属性,网站地址、列表名称、要读取列表项目的数量...
下面的是其中一个属性的定义,自我认为是没有什么问题的...
自定义属性部分
[Personalizable] [WebBrowsable(true)] [Category("定制化配置")] [WebDisplayName("列表所在网站")] [WebDescription("列表所在网站的URL")] public string WebUrl { get { return _webUrl; } set { _webUrl = value; } } private string _webUrl = "/";
接下来是读取列表并绑定到Repeater的代码
绑定Repeater部分
1 List<ItemFieldModel> ifms = null; 2 if (flag) 3 { 4 int num = Convert.ToInt32(displaycount); 5 SPSite site = SPContext.Current.Site; 6 7 try 8 { 9 SPWeb web = site.OpenWeb(webUrl);//site.RootWeb; 10 11 SPList list = web.Lists.TryGetList(listname.Trim()); 12 13 14 readFileMall.NavigateUrl = list.RootFolder.ServerRelativeUrl;//更多的链接地址 15 16 SPView defaultView = null; 17 18 if (string.IsNullOrEmpty(view)) 19 { 20 defaultView = list.DefaultView; 21 } 22 else 23 { 24 defaultView = list.Views[view]; 25 } 26 27 28 29 30 SPQuery query = new SPQuery(); 31 32 query.Query = defaultView.Query; 33 34 query.RowLimit = uint.Parse(displaycount); 35 36 SPListItemCollection listItems = list.GetItems(query); 37 38 39 40 ifms = listItems.Cast<SPListItem>().Select( 41 item => 42 new ItemFieldModel() 43 { 44 Title = item.Title, 45 TitleUrl = list.Forms[PAGETYPE.PAGE_DISPLAYFORM].ServerRelativeUrl + "?ID=" + item.ID.ToString(), 46 AddTime = DateTime.Parse(item["Created"].ToString()) 47 48 } 49 ).ToList<ItemFieldModel>(); 50 51 52 53 } 54 catch (Exception ex) 55 { 56 addErrorTip(ex.Message); 57 } 58 finally 59 { 60 } 61 62 } 63 try 64 { 65 66 int d = ifms.Count; 67 if (d < int.Parse(displaycount)) 68 { 69 for (int i = 0; i < (6 - int.Parse(displaycount)); i++) 70 { 71 ifms.Add(new ItemFieldModel()); 72 } 73 } 74 75 Repeater1.DataSource = ifms; 76 Repeater1.DataBind(); 77 } 78 catch (Exception ex) 79 { 80 addErrorTip(ex.Message); 81 }
过程就是从列表中查询出需要显示的数据然后绑定到Repeater上。
代码完成,直接部署。
修改webpart属性,保存,刷新页面,没有问题....
但再次编辑页面修改webpart属性,修改显示列表条目的数量,保存之后webpart显示数量没变,还是默认的5条...
纠结不应该出现这样的问题啊。
之前做过一个读取文档库的webpart,代码几乎都一样,为什么那个webpart就没有问题呢..
比对两个webpart的代码....
问题应该在这里
可能错的部分
1 using (SPSite site = SPContext.Current.Site) 2 { 3 using (SPWeb web = site.OpenWeb()) 4 { 5 6 } 7 }
之前不知道在哪里看到的,说spweb 使用之后要释放掉,我就使用了 using;
后来才知道,通过SPcontext.current.web获得的spweb对象是不需要释放的,是系统自己维护的 ....
把这个去掉之后问题解决,在此记录。