如何获取内容类型的子内容类型?
从here我了解到,所有子内容类型的contentTypeId都以父母的ID开头。所以,我尝试使用链接中建议的方式。
让我告诉你我先尝试过的事情:
using (var site = new SPSite(SPContext.Current.Site.ID))
{
using (var web = site.RootWeb)
{
SPContentTypeId ctId = new SPContentTypeId(MasterContentTypeId);
SPContentType masterCt = web.ContentTypes[ctId];
var queryString = string.Empty;
queryString += "<Where>";
queryString += "<BeginsWith>";
queryString += "<FieldRef Name='ContentTypeId'/>";
queryString += "<Value Type='Text'>";
queryString += MasterContentTypeId;
queryString += "</Value>";
queryString += "</BeginsWith>";
queryString += "</Where>";
SPSiteDataQuery query = new SPSiteDataQuery { Query = queryString };
DataTable dt = web.GetSiteData(query);
DataView dv = new DataView(dt);
foreach (DataRow row in dt.Rows)
{
//Do Something Necessary
}
}
}
但是DataTable没有返回任何行。
这是否是正确的方法,但是有些东西丢失或错误;或者我这样做是错的吗?
答案 0 :(得分:1)
我想我找到了解决方案。 以下是参考:link
IEnumerable<SPContentType> descendantContentTypes = from SPContentType childCt in web.AvailableContentTypes
where childCt.Id.IsChildOf(parentContentTypeId)
select childCt;