背景のビット:
Umbraco のカスタム データ型に取り組んでいます。データ型は、特定のタイプのノードのリストを表示し、ユーザーがこのリストから選択できるようにします。リストしたいノードのタイプごとに個別のデータ タイプを作成する必要がないように、このデータ タイプを再利用できるようにしました。このデータ タイプのプロパティを作成し、表示するノードのタイプを設定するだけです。
データ型は、チェックボックスのリスト (選択するノードごと) と、これらのノードを選択に追加/選択から削除するボタンを含む UpdatePanel です。
例として、投稿がある場合、このデータ型を追加してカテゴリをリストするように設定できます。これにより、投稿をカテゴリのリストに関連付けることができます。次に、このデータ型の別のインスタンスが必要な場合、たとえば Authors を選択すると、問題が発生し始めます。
DataType 構造情報
これにより、このコントロールがどのように構築されているかについての詳細が得られるはずです。umbraco データ型を作成する3 つのクラス メソッドを使用したため、.ascx ファイルはなく、プログラムで要素をページにレンダリングする .cs ファイルだけです。
チェックボックスは、ノードのリストを反復処理し、次をレンダリングすることによってレンダリングされます。
<input type='checkbox' name='select_nodes' value='" + n.Id + "' />
次に、選択したノードのリストにノードを追加するためのボタンと、ノードを削除するためのボタンの 2 つのボタンをレンダリングします (ここでは追加を示しています)。このボタンは、ノード ID のカンマ区切りのリストを含む Form["select_nodes"] の値を取得し、それを個別のノードのリストに追加します。
ボタンは次のように追加されます。
public override void OnInit(EventArgs e)
{
//Add Button
btn_Add = new Button();
btn_Add.CssClass = "btn_add";
btn_Add.ID = "btnAdd" + Guid.NewGuid();
btn_Add.Text = "Add >>";
btn_Add.Click += new EventHandler(selectNodes);
base.ContentTemplateContainer.Controls.Add(btn_Add);
}
上記では、このコントロールを基本的な形式で説明していますが、うまくいけば、セットアップについてもう少し洞察が得られます。
問題
このデータ型の複数のインスタンスを持つノードをロードすると、上記の例のように、重複するコントロール ID が原因でエラーが発生します。ID にランダムな GUID を追加することでこれを克服しました。現在の問題は、ノードを選択/選択解除するボタンが機能していないように見えることです。これらのボタンのインスタンスが複数あり、どのイベントを起動するか混乱しているためだと思いますか?
これを回避する方法はありますか?コントロールの複数のインスタンス間の干渉を避けるには?
ありがとう、