2013-05-07 93 views
0

通常,当我想访问Sitecore中的当前项目时,我会通过Sitecore.Context.Item。在创建最终用户使用的工具时,此功能会很好,但不适用于Sitecore管理员使用的工具。如果我想在Content Editor本身中显示某个自定义字段,则Context.Item是对Content Editor的引用,而不是在编辑器中选择的节点。如何从Sitecore内容编辑器的自定义字段访问父项目?

大多数情况下,我可以通过使用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(); 
} 

如何获取项目ID在我的监听器(像LiveClicked以上)?

+0

我意识到这不是自定义字段实际应该做的事情,但客户已明确声明他希望在内容编辑器的主体中具有某些功能。 – cwallenpoole 2013-05-07 18:32:36

回答

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; 
    } 
} 
+0

我意识到这是代码味道。这让我感到十分错误,但它解决了这个问题。如果有更好的答案,我会很乐意接受并取代它。 – cwallenpoole 2013-05-07 18:31:31

相关问题