2013-06-06 22 views
0

У меня есть функция:Почему SiteCollection всегда имеет значение null?

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 возвращается нуль, который является причиной этого не делать то, что я от него хочу. Когда я проверяю properties.Feature.Parent, я вижу сайт Имя: 'Team Site'

Так почему же этот нуль?

Update:

Этот проект является сайт области видимости

+0

Может быть полезно добавить информацию о том, кто и с какого приложения вызывает этот метод ... –

ответ

0

Потому что это не вид SPSite? Итак, когда вы бросаете его как что-то, это не становится нулевым?

+0

У меня есть другие методы, очень похожие на то, что они делают то же самое, соглашаясь, что они не возвращают null. – TheWebs

+0

Почему бы вам не проверить «if (! Properties.Feature.Parent is SPSite) System.Console.Write (« О, вот почему это пусто! »); –

0

Возможно, properties.Feature.Parent не является объектом SPSite. Код as SPSite установит siteCollection в Null, если это объект SPWeb

+0

Есть ли способ проверить это? при проверке? скажет ли он мне его тип? – TheWebs

+0

Да: properties.Feature.Parent.GetType() –

+0

Я полагаю, вы вызываете этот метод из приемника событий, который может быть веб-сайтом или областью? Если это так, вы можете захотеть передать в SPWeb-объект явно –

1

Есть две возможные причины, которые siteCollection может быть null после строки инстанцировании он работает:

  1. properties.Feature.Parent является null
  2. properties.Feature.Parent не является a SPSite (или производный от SPSite)

Если вы говорите, что в отладчике вы можете видеть, что properties.Feature.Parent не является null, когда siteCollection есть, это означает, что properties.Feature.Parent не является экземпляром SPSite.

Вы можете увидеть тип этого свойства при отладке, открыв окно «Смотреть» и введя выражение properties.Feature.Parent.GetType().

0

Если вы пытаетесь отладить это, после этой строки SPSite siteCollection = properties.Feature.Parent as SPSite;, если вы запустите это либо в окне просмотра, либо в ближайшем окне properties.Feature.Parent.GetType(), вы должны иметь возможность идентифицировать тип возвращаемого объекта, обратите внимание, что это должно быть совместимый тип (для SPSite), чтобы иметь возможность отличать, иначе вы получите нулевой объект.

Смежные вопросы