我试过这个:
SPFolder folder = ...;
folder.Item["Name"] = newName;
folder.Item.Update();
它表现得很神秘。如果我运行它,它会引发异常:
SPException: Cannot complete this action.
但是,如果我在新的Name分配之后和Update()之前在调试器中停止它,并查看folder.Item的属性,然后继续,它每次都有效。这不是时间问题,我尝试在调试器中停止它而不在Locals窗口中查看它,但它在那个时间抛出异常。
这个问题表明类似的解决方案,但使用SystemUpdate(),这有关系吗? Programmatically changing name of SPFolder
答案 0 :(得分:8)
在Document Library
项目(文件夹)的字段Name
中有StaticName = FileLeafRef
。那真正对我有用的是
folder.Item[SPBuiltInFieldId.FileLeafRef] = "The new name";
folder.Item.Update();
答案 1 :(得分:1)
您无需更改名称,但需要更改标题。 所以:
folder.Item[SPBuiltInFieldId.Title] = newName;
folder.Item.Update(); // or SystemUpdate(false)
Update和SystemUpdate之间的区别在于Update将根据信息进行修改/修改,如果启用了版本控制,则会增加版本号。 SystemUpdate不会更新这些。
另请注意,我使用SPBuiltInFieldId.Title。这比使用“标题”更好,因为“标题”可能会导致非英语网站出现问题。
答案 2 :(得分:1)
SPFolder attachfolder = documentLibrary.RootFolder.SubFolders[guid];
//rename guid to new item id
attachfolder.Properties[SPBuiltInFieldId.Title.tostring()] = itemID;
attachfolder.Update();
答案 3 :(得分:1)
尝试在操作“ folder.ParentWeb.AllowUnsafeUpdates = true ”之前添加 然后将AllowUnsafeUpdates恢复到之前的值。
答案 4 :(得分:0)
您可以尝试使用MoveTo
方法
答案 5 :(得分:0)
folder.Item["Name"] = newName;
folder.ParentWeb.AllowUnsafeUpdates = true;
folder.Item.Update();
folder.ParentWeb.AllowUnsafeUpdates = false;
这个叉给我