一点背景:
我一直在研究 Umbraco 的自定义数据类型。数据类型显示特定类型的节点列表,并允许用户从该列表中进行选择。我试图使这种数据类型可重用,这样我就不必为我希望列出的每种类型的节点创建一个单独的数据类型。我只需创建此数据类型的属性并设置要显示的节点类型。
数据类型是一个 UpdatePanel,其中包含一个复选框列表(用于每个要选择的节点)和一个用于在选择中添加/删除这些节点的按钮。
例如,如果我有一个帖子,我可以添加此数据类型并将其设置为列表类别,这允许我将帖子与类别列表相关联。如果我想再有这个数据类型的另一个实例,比如选择作者,我开始遇到问题。
数据类型结构信息
这应该提供有关如何构建此控件的更多详细信息。它使用3 类方法来创建 umbraco 数据类型,因此我没有 .ascx 文件,只有一个 .cs 文件,它以编程方式将元素呈现到页面上。
通过遍历节点列表并呈现以下内容来呈现复选框:
<input type='checkbox' name='select_nodes' value='" + n.Id + "' />
然后我渲染两个按钮,一个用于将节点添加到选定节点列表中,另一个用于删除它们(我只是在此处显示添加)。这个按钮简单地获取 Form["select_nodes"] 的值,它包含一个逗号分隔的节点 ID 列表,并且对于每一个,将其添加到单独的节点列表中。
按钮添加如下:
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 会发生错误,我通过将随机 guid 附加到 ID 来克服这个问题。现在的问题是选择/取消选择节点的按钮似乎不起作用。我假设这是由于这些按钮有多个实例,并且对触发哪个事件感到困惑?
有没有办法解决这个问题?为了避免跨控件的多个实例的干扰?
谢谢,