sharepoint 纠结的一个小问题

遇到一个小小的问题,纠结了半天,记录一下。

做了一个小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对象是不需要释放的,是系统自己维护的 ....

把这个去掉之后问题解决,在此记录。

 

 

 

 

 

 

 

你可能感兴趣的:(SharePoint)