Ошибка с шаблонным элементом управления с атрибутом [TemplateInstance (TemplateInstance.Single)] внутри FormView - PullRequest
2 голосов
/ 01 декабря 2011

Я создал пользовательский элемент управления, который имеет один ContentTemplate, где я украсил свойство ITemplate атрибутом [TemplateInstance (TemplateInstance.Single)], чтобы сделать все элементы управления внутри непосредственно доступными без использования 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 имеют одинаковый идентификатор:

«Класс XXX уже содержит определение для textBox»

Я нахожу это очень странным, поскольку InsertItemTemplate и EditItemTemplate FormView НЕ украшены упомянутым атрибутом, поэтому все элементы управления внутри должны быть ограничены своим шаблоном. Это также верно для идентификатора «myControl» в приведенном выше примере, который не приводит к конфликту ...

У кого-нибудь есть идеи, как решить эту проблему? На данный момент я могу использовать разные идентификаторы в шаблонах, но мне бы хотелось, чтобы они работали как есть, поскольку это настолько распространено, что элементы управления внутри этих шаблонов FormView имеют одинаковые идентификаторы: s.

1 Ответ

0 голосов
/ 05 сентября 2015

Я знаю, что уже поздно, но когда вы определяете TemplateInstance.Single, структура позволяет напрямую ссылаться на элемент управления, и поэтому идентификаторы должны быть уникальными.Следовательно, вам не нужно FindControl(), но вам также нужен уникальный идентификатор для перехода.Элементы управления, такие как ListView, где он имеет ItemTemplate, используют TemplateInstance.Multiple.Вот почему некоторые шаблоны различаются по поведению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...