在Sitecore中我创建了一个自定义字段(通过此配方:http://sdn.sitecore.net/Articles/API/Creating%20a%20Composite%20Custom%20Field/Adding%20a%20Custom%20Field%20to%20Sitecore%20Client.aspx) 该字段用于内容编辑器。 自定义字段附加了一个menuitem(在字段上方呈现的小文本按钮) 自定义字段按预期工作,menuitem挂钩到自定义字段类中的代码。但是,我需要为menuitem实现的逻辑要求我在内容编辑器中获得用户当前正在编辑的项目的引用。
然而,令我惊讶的是,这不起作用:
Sitecore.Context.Item
这不会给我用户当前正在编辑的项目,而是“内容编辑器”项,它始终是相同的。 我认为API中只有一些对象的属性,但我找不到它。
答案 0 :(得分:2)
如果您关注本文,那么您将在控件上定义一个属性..
public string ItemID { get; set;}
..这将填充您正在编辑的项目的ID。您应该可以使用以下内容解析此ID中的Item
对象:
Sitecore.Data.Database.GetDatabase("master").GetItem(ItemID)
..如果您只想查看正在编辑的字段的值,可以使用base.Value
字段。
答案 1 :(得分:0)
最好问这个问题的地方是developer forum,你应该在那里得到很好的答复。
但是,仔细查看Sitecore代码,看起来这可能就是您想要的。尝试从ViewState中读取它:
public string ItemID
{
get
{
return base.GetViewStateString("ItemID");
}
set
{
Assert.ArgumentNotNullOrEmpty(value, "value");
base.SetViewStateString("ItemID", value);
}
}
答案 2 :(得分:0)
ItemID
一样,通过反射放在场上。还有ItemVersion
和Source
对您的自定义控件非常有用。
如果您有异议,请在课程Sitecore.Shell.Applications.ContentEditor.EditorFormatter
中查看,尤其是方法SetProperties
:
ReflectionUtil.SetProperty(editor, "ItemID", field.ItemField.Item.ID.ToString());
ReflectionUtil.SetProperty(editor, "ItemVersion", field.ItemField.Item.Version.ToString());