Допустим, у меня есть абстрактный класс IA с подклассами A1, A2, A3.
Для каждого подкласса у меня была страница с FormView для вставки / редактирования / просмотра с кодом, специфичным для этого класса. Шаблоны для вставки / редактирования / просмотра очень похожи, поэтому в основном это были вырезать и вставить, и у компилятора не было проблем с тем, что в разных шаблонах были элементы управления с одинаковыми идентификаторами.
Примерно так:
<asp:FormView>
<InsertItemTemplate>
<asp:Label id="Label1" />
</InsertItemTemplate>
<EditItemTemplate>
<asp:Label id="Label1" />
</EdittItemTemplate>
</asp:FormView>
Большая часть кода / разметки оказалась избыточной на всех страницах, поэтому я реорганизовал ее для использования формата master / content, при этом главная страница содержала заполнители содержимого для шаблонов вставки, редактирования и просмотра.
Главная страница:
<asp:FormView>
<InsertItemTemplate>
<asp:ContentPlaceHolder ID="InsertItemTemplate"></asp:ContentPlaceHolder>
</InsertItemTemplate>
<EditItemTemplate>
<asp:ContentPlaceHolder ID="EditItemTemplate"></asp:ContentPlaceHolder>
</EdittItemTemplate>
</asp:FormView>
И содержание страницы:
<asp:Content ContentPlaceHolderID="InsertItemTemplate">
<asp:Label id="Label1" />
</asp:Content>
<asp:Content ContentPlaceHolderID="EditItemTemplate">
<asp:Label id="Label1" />
</asp:Content>
В шаблонах страницы содержимого я делаю то же самое, что делал до рефакторинга, но теперь компилятор взрывается с ошибкой BC30260: 'Label1' is already declared as 'Protected WithEvents Label1 As System.Web.UI.WebControls.Label' in this class.
По какой-то причине он не разделяет элементы управления в блоках контента так же, как это делалось, когда они были в шаблонах, даже если заполнители контента находятся в отдельных шаблонах.
Есть ли способ обойти это, кроме как переименовать все мои элементы управления?