我创建了一个自定义控件,它有一个ContentTemplate,我在其中使用[TemplateInstance(TemplateInstance.Single)]属性修饰了ITemplate属性,使所有控件都可以直接使用,而无需使用FindControl来访问它们。
但是,如果我根据以下内容在Formviews InsertItemTemplate和EditItemTemplate中使用我的控件...
<asp:FormView runat="server" ID="formView">
<InsertItemTemplate>
<my:Control runat="server" ID="myControl">
<ContentTemplate>
<asp:TextBox runat="server" ID="textBox" />
</ContentTemplate>
</my:Control>
</InsertItemTemplate>
<EditItemTemplate>
<my:Control runat="server" ID="myControl">
<ContentTemplate>
<asp:TextBox runat="server" ID="textBox" />
</ContentTemplate>
</my:Control>
</EditItemTemplate>
</asp:FormView>
...我收到一条错误消息,因为我的ContentTemplate中的两个文本框(或任何其他控件)具有相同的ID:
“XXX类已包含textBox的定义”
我发现这很奇怪,因为FormView的InsertItemTemplate和EditItemTemplate没有使用提到的属性进行修饰,因此内部的所有控件都应限定为其模板。对于上面示例中的ID“myControl”也是如此,它不会发生冲突......
有谁知道如何解决这个问题?现在我可以在模板中使用不同的ID:但是我希望它能够按原样工作,因为这些FormView模板中的控件具有相同的ID:s。
答案 0 :(得分:0)
我知道这已经很晚了,但是当你定义TemplateInstance.Single
时,框架允许直接引用控件,因此ID必须是唯一的。因此,您不需要FindControl()
,但您还需要一个唯一的ID来引用。像ListView这样具有ItemTemplate的控件使用TemplateInstance.Multiple
。这就是为什么某些模板因行为而异的原因。