Это можно сделать следующим образом:
public void ListContentTypes(string siteUrl)
{
try
{
using (SPSite site = new SPSite(siteUrl))
{
using (SPWeb web = site.OpenWeb())
{
ListContentTypes(web);
}
}
}
catch (Exception ex)
{
// add some proper error handling here
}
}
public void ListContentTypes(SPWeb web)
{
foreach (SPContentType ct in web.ContentTypes)
{
// do whatever you want to do with the content type here
}
foreach (SPWeb subWeb in web.Webs)
{
try
{
ListContentTypes(subWeb);
}
finally
{
if (subWeb != null)
{
subWeb.Dispose();
}
}
}
}
Это позволит найти все типы контента, существующие в семействе сайтов, но помните, что не все типы контента будут доступны во всем семействе сайтов.Например: если у вас есть тип контента «Продукт», который существует на дочернем сайте, приведенный выше код найдет его, но вы не сможете использовать его в корневом веб-сайте, поскольку он определен на более низком уровне.