通常,当我想访问Sitecore中的当前项目时,我会浏览Sitecore.Context.Item
。这在创建将由最终用户使用的工具时很有效,但对于Sitecore管理员使用的工具则不行。如果我希望某些内容在Content Editor
本身中显示为自定义字段,则Context.Item
是对Content Editor
的引用,而不是对在编辑器中选择的节点的引用。
在大多数情况下,我可以通过使用ItemID
属性来解决这个问题,但是如果我在该字段上有事件调度程序,那么它们将无法再访问ItemID。例如:
protected override void OnPreRender(EventArgs e)
{
if (IsEvent)
{
// ItemID is defined here!
Button live = FindControl(GetID(LiveButton)) as Button;
if (live != null)
{
live.ServerProperties["Click"] = string.Format("{0}.LiveClicked", ID);
}
}
}
public void LiveClicked()
{
// ItemID is blank here!
DoSomething();
}
如何在我的听众中获得对ItemID的访问权限(例如上面的LiveClicked
)?
答案 0 :(得分:0)
我解决它的方式是通过一个名为ServerProperties
的东西,我在每个监听器中调用了相应的函数。
private void SyncID()
{
var live = FindControl(GetID(LiveButton)) as Button;
if (live != null)
{
if(string.IsNullOrEmpty(ItemID))
{
ItemID = live.ServerProperties["owner_id"].ToString();
}
live.ServerProperties["owner_id"] = ItemID;
}
}