Я обнаружил, что различные свойства "Associated ..." часто имеют значение NULL. Единственный надежный способ - использовать пакет свойств на SPWeb:
- Посетители:
vti_associatevisitorgroup
- Участники:
vti_associatemembergroup
- Владельцы:
vti_associateownergroup
Чтобы преобразовать их в объект SPGroup, вы можете использовать:
int idOfGroup = Convert.ToInt32(web.Properties["vti_associatemembergroup"]);
SPGroup group = web.SiteGroups.GetByID(idOfGroup);
Однако, как Кевин упоминает , ассоциации могут быть потеряны, что вызовет исключения в приведенном выше коде. Лучший подход заключается в следующем:
Убедитесь, что в сети установлены ассоциации, убедившись, что свойство, которое вы ищете, действительно существует.
Убедитесь, что группа с идентификатором, заданным свойством, действительно существует. Удалите вызов SiteGroups.GetByID и вместо этого переберите каждую SPGroup в SiteGroups в поисках идентификатора.
Более надежное решение:
public static SPGroup GetMembersGroup(SPWeb web)
{
if (web.Properties["vti_associatemembergroup"] != null)
{
string idOfMemberGroup = web.Properties["vti_associatemembergroup"];
int memberGroupId = Convert.ToInt32(idOfMemberGroup);
foreach (SPGroup group in web.SiteGroups)
{
if (group.ID == memberGroupId)
{
return group;
}
}
}
return null;
}