【发布时间】:2015-06-25 08:06:44
【问题描述】:
我创建了自定义树视图字段 - 多选树视图。
此字段继承自 Sitecore.Shell.Applications.ContentEditor.TreeList 并重写了 Add() 方法:
public class MultiselectTreeList : TreeList
{
protected new virtual void Add()
{
bool alert = true;
if (this.Disabled) return;
string viewStateString = this.GetViewStateString("ID");
var treeviewEx = this.FindControl(viewStateString + "_all") as TreeviewEx;
Assert.IsNotNull(treeviewEx, typeof (DataTreeview));
var listbox = this.FindControl(viewStateString + "_selected") as Listbox;
Assert.IsNotNull(listbox, typeof (Listbox));
if (treeviewEx == null)
{
SheerResponse.Alert("TreeviewEx control not found..", new string[0]);
}
else
{
Item[] selectionItems = treeviewEx.GetSelectedItems();
if (selectionItems == null)
{
SheerResponse.Alert("Select an item in the Content Tree.", new string[0]);
}
else
{
foreach (Item selectionItem in selectionItems)
{
if (this.HasExcludeTemplateForSelection(selectionItem)) return;
if (this.IsDeniedMultipleSelection(selectionItem, listbox))
{
if (alert)
{
SheerResponse.Alert("You cannot select the same item twice.", new string[0]);
alert = false;
}
}
else
{
if (!this.HasIncludeTemplateForSelection(selectionItem)) return;
SheerResponse.Eval("scForm.browser.getControl('" + viewStateString +
"_selected').selectedIndex=-1");
var listItem = new ListItem {ID = GetUniqueID("L")};
Sitecore.Context.ClientPage.AddControl(listbox, listItem);
listItem.Header = this.GetHeaderValue(selectionItem);
listItem.Value = listItem.ID + (object) "|" + selectionItem.ID;
SheerResponse.Refresh(listbox);
SetModified();
}
}
}
}
}
}
我已经在核心数据库中注册了它:/sitecore/system/Field types/Custom Types/Multiselect Tree List:填充了Assembly和Class字段。
添加了带有多选树列表字段的项目。填充数据。多选工作正常。
但是当我尝试使用 Ribbon->Navigate->Links 查找引用时,我看不到对项目的引用(也错过了主数据库中 Links 表中的 TargetItemId)。
当我将其更改为 Sitecore Treeview 字段时 - 一切正常。
据我了解,爬虫不会索引我的字段和未添加到数据库的链接。
任何想法如何解决这个问题?
【问题讨论】: