FormView中具有属性[TemplateInstance(TemplateInstance.Single)]的模板化控件出错

时间:2011-12-01 07:36:20

标签: asp.net custom-controls webforms controltemplate

我创建了一个自定义控件,它有一个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。

1 个答案:

答案 0 :(得分:0)

我知道这已经很晚了,但是当你定义TemplateInstance.Single时,框架允许直接引用控件,因此ID必须是唯一的。因此,您不需要FindControl(),但您还需要一个唯一的ID来引用。像ListView这样具有ItemTemplate的控件使用TemplateInstance.Multiple。这就是为什么某些模板因行为而异的原因。