0

我有这个功能:

    public SPList CreateList(SPFeatureReceiverProperties properties, Dictionary<string, List<AddParams>> columns, 
        string name, string description, SPListTemplateType type, string viewDescription)
    {

        SPList spList = null;

        SPSite siteCollection = properties.Feature.Parent as SPSite;
        if (siteCollection != null)
        {
            SPWeb web = siteCollection.RootWeb;
            web.Lists.Add(name, description, type);
            web.Update();

            // Add the new list and the new content.
            spList = web.Lists[name];
            foreach(KeyValuePair<string, List<AddParams>> col in columns){
                spList.Fields.Add(col.Key, col.Value[0].type, col.Value[0].required);
            }

            spList.Update();

            //Create the view? - Possibly remove me.
            System.Collections.Specialized.StringCollection stringCollection =
                new System.Collections.Specialized.StringCollection();

            foreach (KeyValuePair<string, List<AddParams>> col in columns)
            {
                stringCollection.Add(col.Key);
            }

            //Add the list.
            spList.Views.Add(viewDescription, stringCollection, @"", 100,
                true, true, Microsoft.SharePoint.SPViewCollection.SPViewType.Html, false);
            spList.Update();

            return spList;
        }

        return spList;
    }

然而,由于某种原因,在调试 siteCollection 时返回 null,这导致它无法执行我想要的操作。当我检查时,properties.Feature.Parent我看到站点名称:“团队站点”

那么为什么这个为空呢?

更新:

这个项目,是站点范围的

4

4 回答 4

1

在实例化它的行运行之后siteCollection可能有两个可能的原因:null

  1. properties.Feature.Parentnull
  2. properties.Feature.Parent不是SPSite(或派生自SPSite

如果你说你可以在调试器中看到properties.Feature.Parent不是nullwhen siteCollectionis,那意味着这properties.Feature.Parent不是一个SPSite实例。

您可以在调试时通过打开 Watch 窗口并输入表达式来查看此属性的类型properties.Feature.Parent.GetType()

于 2013-06-06T18:40:19.293 回答
0

因为它不是一种SPSite?因此,当您将其转换为某种东西时,它不会变为空吗?

于 2013-06-06T18:39:03.077 回答
0

也许properties.Feature.Parent不是 SPSite 对象。如果它是 SPWeb 对象,代码as SPSite将设置siteCollectionNull

于 2013-06-06T18:39:50.857 回答
0

如果您尝试调试它,在此行之后SPSite siteCollection = properties.Feature.Parent as SPSite;,如果您在监视窗口或即时窗口中运行它,properties.Feature.Parent.GetType()您应该能够识别它返回的对象的类型,请注意它必须是兼容的类型(对于 SPSite ) 才能进行强制转换,否则您将获得 null 对象。

于 2013-06-06T18:48:00.587 回答