FindControl
работает только после добавления этих элементов управления в коллекцию Controls
, и это происходит только внутри метода OnInit
. Таким образом, вы получаете исключения, потому что элементы управления LB1, LB2 и т. Д. Не были добавлены в коллекцию Controls, а FindControl возвращает null
.
Один из способов сделать это - List<LinkButton>
, затем в обработчике событий Init
добавить элементы управления в список.
Другой способ, вы можете использовать LINQ для циклического обхода дочерних элементов управления:
var ctrls = Controls.OfType<LinkButton>();
Эта версия будет возвращать все LinkButton
элементы управления, поэтому я не уверен, что это именно то, что вы хотите. Опять же, это будет работать только в событии Init
или позже в цикле страниц.
Дополнительно
В зависимости от структуры вашей страницы вам может быть лучше использовать Repeater control. Примерно так в вашем файле .aspx / ascx:
<asp:Repeater ID="repeater" runat="server">
<ItemTemplate>
<asp:LinkButton ID="btn" runat="server" />
</ItemTemplate>
</asp:Repeater>
Тогда в вашем коде вы будете использовать привязку данных для настройки массива и т. Д.