Хорошо, я нашел решение, пока лучше не придет мой путь. Проблема в том, как указал Джейми Диксон (спасибо, Джейми):
The FindControl method does not do a deep search for controls. It looks directly in the location you specify for the control you're requesting.
Итак, поскольку у меня есть пользовательские элементы управления в разных заполнителях контента, я должен сначала найти целевой заполнитель (там, где находится пользовательский элемент управления), а затем я могу искать в нем пользовательский элемент управления:
protected void Dodaj_Feed_Panel_Click(object sender, EventArgs e)
{
ContentPlaceHolder MySecondContent = (ContentPlaceHolder)this.Parent.Parent.FindControl("MyTestContent2");
UserControl UC_text = (UserControl)MySecondContent.FindControl("text1");
UC_text.Visible = true;
}
то, что действительно раздражает и смущает меня, это часть this.Parent.Parent
, потому что я знаю, что это не лучшее решение (в случае, если я немного изменю иерархию, этот код сломается). На самом деле эта часть кода состоит в том, что она поднимается на два уровня вверх по иерархии страниц (то есть страницы, где находятся оба пользовательских элемента управления). Я не знаю, в чем разница с this.Page
, потому что для меня это означает то же самое, но не работает для меня.
Долгосрочным решением будет что-то вроде серверных «jQuery-подобных селекторов» (оно может находить элементы независимо от того, где они находятся в иерархии). У кого-нибудь есть лучшее решение?