0

通常、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上記のように)?

4

1 に答える 1

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;
    }
}
于 2013-05-07T18:30:21.293 に答える