C# 删除项目时,如何模拟Content Editor的“删除链接”选项?

C# 删除项目时,如何模拟Content Editor的“删除链接”选项?,c#,asp.net,sitecore,sitecore6,C#,Asp.net,Sitecore,Sitecore6,我有一组项目,其中有一个树列表字段,该字段引用媒体库中的媒体项目。如果我删除了一个被另一个项目引用的媒体项目,我会看到“断开的链接”对话框,该对话框提供了删除链接、链接到另一个项目或只保留断开的链接的选项 当我选择删除链接时,调用了什么API/代码?我希望在代码隐藏中以编程方式执行相同的操作 对于上下文,我们允许我们的广告成员上传图像,并通过自定义的web界面操纵他们的图像库。因此,当有人从他们的集合中删除图像时,显然我们不想留下指向这些媒体库项目的断开链接。这就是链接数据库。您可以在删除项目之

我有一组项目,其中有一个树列表字段,该字段引用媒体库中的媒体项目。如果我删除了一个被另一个项目引用的媒体项目,我会看到“断开的链接”对话框,该对话框提供了删除链接、链接到另一个项目或只保留断开的链接的选项

当我选择删除链接时,调用了什么API/代码?我希望在代码隐藏中以编程方式执行相同的操作


对于上下文,我们允许我们的广告成员上传图像,并通过自定义的web界面操纵他们的图像库。因此,当有人从他们的集合中删除图像时,显然我们不想留下指向这些媒体库项目的断开链接。

这就是链接数据库。您可以在删除项目之前使用它来查找推荐人:

Sitecore.Globals.LinkDatabase.GetReferrers(item)
返回的ItemLink对象包含引用要删除的项的项和字段。使用适当的字段类删除引用

尽管您可能认为LinkDatabase上的RemoveLinks或RemoveReferences方法可以完成您所寻找的功能,但实际上它只是从链接数据库本身删除链接/引用

编辑: 一点反射器的工作就会得到一个更完整的解决方案。。。如果使用FieldTypeManager工厂获取字段的CustomField,则可以在该字段上调用RemoveLinkItemLink

Field field = item.Fields[brokenField];
CustomField field2 = FieldTypeManager.GetField(field);
item.Editing.BeginEdit();
field2.RemoveLink(itemLink);
item.Editing.EndEdit();
这是未经测试的代码,可通过引用Sitecore.Shell.Applications.Links.EditLinksForm找到