我要添加自定义内容类型,然后将其设置为自定义内容类型的默认内容类型。我已按照互联网上的说明进行操作。 当我执行代码时,我的自定义内容类型已添加,但尚未设置为默认内容类型(运行时无错误,异常)。 这是我的代码:
List list = web.Lists.GetByTitle(lname);
list.ContentTypesEnabled = true;
list.ContentTypes.AddExistingContentType(contentType);
var ctypes = list.ContentTypes;
context.Load(ctypes);
context.ExecuteQuery();
var ids = new List<ContentTypeId>();
foreach(var content in ctypes)
{
ids.Add(GetByName(ctypes, content.Name).Id);
}
ids.Reverse();
list.RootFolder.UniqueContentTypeOrder = ids;
list.RootFolder.Update();
list.Update();
context.Load(list.RootFolder, r => r.UniqueContentTypeOrder);
Console.WriteLine("Content-type Added!");
上面的函数GetByName用于通过名称获取ContentType:
public static ContentType GetByName(ContentTypeCollection cts, string name)
{
var ctx = cts.Context;
ctx.Load(cts);
ctx.ExecuteQuery();
return Enumerable.FirstOrDefault(cts, ct => ct.Name == name);
}
那么,我在哪里弄错了?我该怎么解决?
答案 0 :(得分:0)
尝试使用以下代码为列表设置默认的内容类型。
List aeList = context.Web.Lists.GetByTitle(lname);
var currentCtOrder = aeList.ContentTypes;
context.Load(currentCtOrder, coll => coll.Include(
ct => ct.Name,
ct => ct.Id));
context.ExecuteQuery();
IList<ContentTypeId> reverseOrder = (from ct in currentCtOrder where ct.Name.Equals("CustomContentTypeName", StringComparison.OrdinalIgnoreCase) select ct.Id).ToList();
aeList.RootFolder.UniqueContentTypeOrder = reverseOrder;
aeList.RootFolder.Update();
aeList.Update();
context.ExecuteQuery();