Лучший способ - реализовать событие OnDataBinding
для пользовательского элемента управления. Я стараюсь избегать размещения кода в aspx, используя веб-формы, если это возможно.
Когда повторитель будет привязан, для каждого связанного элемента будет срабатывать OnDataBinding
для вашего пользовательского элемента управления, и ваш обработчик может делать то, что ему нужно. Вам не нужно искать элементы управления.
Вот пример:
// in your aspx
<uc1:pfd ID="pfd1" runat="server" ShowContainerName="false" ParentContentTypeId="55"
OnDataBinding="pfd1_DataBinding" />
// in your codebehind implement the OnDataBinding event
protected void pfd1_DataBinding(object sender, System.EventArgs e)
{
pfd uc = (pfd)(sender);
uc.ContainerID = _containerID.ToString();
uc.ParentItemID = Eval("ItemID");
// Here you can do more like access other items like hidden fields
// or cached objects or even other controls etc... Skys the limit.
}
РЕДАКТИРОВАТЬ: Обратите внимание, что из вашего комментария вам требуется больше данных, чем указано в источнике данных. В этом случае я обычно делаю частные переменные-члены в .cs, в которых я храню данные. Поэтому, когда у вас есть идентификатор контейнера, просто сохраните его в переменной, которая будет доступна.
Например, в ваших .cs для вашей страницы:
public partial class _TestPage : System.Web.UI.Page
{
private int _containerID { get; set; }
Затем при загрузке данных просто установите свойство _containerID
, и оно будет доступно в событии OnDataBinding
. Просто убедитесь, что вы связываете после того, как вы установили _containerID
.