Доступ к asp: содержимое из кода

Хорошо, я опытный веб-разработчик, но иногда ASP.Net обманывает меня. У меня есть главная страница в asp.net. Затем у меня есть страница, основанная на этой главной странице (home.aspx). Теперь в home.aspx.cs Я хочу получить доступ к элементам управления asp: content, чтобы программным образом добавлять элементы управления.

Aspx выглядит следующим образом:

<asp:Content ID="leftCol" ContentPlaceHolderID="cphLeftCol" Runat="Server">
  <asp:PlaceHolder ID="phLeftCol" runat="server">
  </asp:PlaceHolder>
</asp:Content>

Я бы ожидал, что я смогу ссылаться на "leftCol" из моего кода. Но это неизвестно. Для тестирования я добавил свой собственный заполнитель "phLeftCol". Я могу ссылаться на это без проблем.

Есть ли что-то, чего я не вижу?

Ответ 1

Вы не можете получить доступ к asp: Content control непосредственно из своего кода. Элемент управления содержимым не добавляется в иерархию управления во время выполнения, поэтому он недоступен из кода позади, чтобы добавлять элементы управления во время выполнения. Чтобы добавить элементы управления к нему во время выполнения, вам нужно добавить еще один элемент управления контейнера в элемент управления контентом и добавить к нему элементы управления (как это было сделано с контролем закладок).

Дополнительную информацию см. в статье MSDN.

Ответ 2

Вы не можете получить доступ к элементу управления "leftCol" из кода главной страницы, поскольку он является владельцем содержимого этой страницы, и код вашей домашней страницы не знает о его содержании в момент инъекции... вы можете получить доступ только контроля в этом контенте. Инъекция контента идет в asp.net снизу вверх, поэтому содержимое вашей домашней страницы, в этом случае все между тегами <asp:Content ID="leftCol" ...> and </asp:Content>, появляется на местеHolder главной страницы...

приветствия