如何在Sitecore中的自定义字段内获取对当前编辑的项目的引用

时间:2011-11-16 07:49:45

标签: sitecore sitecore6

在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中只有一些对象的属性,但我找不到它。

3 个答案:

答案 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)

虽然有更多属性可以“自动”从Sitecore中检索出来,但是Stephen Pope是对的。一些属性,就像ItemID一样,通过反射放在场上。还有ItemVersionSource对您的自定义控件非常有用。

如果您有异议,请在课程Sitecore.Shell.Applications.ContentEditor.EditorFormatter中查看,尤其是方法SetProperties

ReflectionUtil.SetProperty(editor, "ItemID", field.ItemField.Item.ID.ToString());
ReflectionUtil.SetProperty(editor, "ItemVersion", field.ItemField.Item.Version.ToString());