Скажем, у меня есть абстрактный класс IA с подклассами A1, A2, A3.
Для каждого подкласса у меня была страница с FormView для вставки / редактирования / просмотра с кодом, специфичным для этого класса. Все шаблоны для вставки / редактирования / просмотра очень похожи, поэтому в основном это было вырезано и вставлено, и у компилятора не было проблем с тем, что в разных шаблонах были элементы управления с одинаковыми идентификаторами.
Что-то вроде этого:
<asp:FormView>
<InsertItemTemplate>
<asp:Label id="Label1" />
</InsertItemTemplate>
<EditItemTemplate>
<asp:Label id="Label1" />
</EdittItemTemplate>
</asp:FormView>
Большая часть кода / разметки оказалась избыточной на страницах, поэтому я реорганизовал его, чтобы использовать формат мастер / контент, с главной страницей, имеющей заполнители контента для шаблонов вставки / редактирования / просмотра.
Главная страница:
<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.
По какой-то причине он не разделяет элементы управления в блоках содержимого так, как это было, когда они были в шаблонах, даже несмотря на то, что заполнители содержимого находятся в отдельных шаблонах.
Есть ли способ обойти это, кроме как переименовать все мои элементы управления?