FindControl внезапно возвращает ссылку на объект (ASP.NET/C#) - PullRequest
0 голосов
/ 14 апреля 2011

В моем файле Global.asax есть следующий код:

System.Web.UI.Page webPage = (System.Web.UI.Page)System.Web.HttpContext.Current.Handler;
string date = ((Literal)webPage.FindControl("ltlGenTime")).Text;

Элемент управления определенно существует на веб-странице, и я проверил это, проверив объект webPage иего базовый класс, и это определенно буквальный элемент управления.

Теперь я внес изменение, которое, по-видимому, и вызвало это - я создал главную страницу для всех своих страниц.Но я запутался, поскольку у объекта webPage все еще есть элемент управления, который мне нужен.

Есть идеи?

Ответы [ 4 ]

2 голосов
/ 14 апреля 2011

Главные страницы изменяют иерархию элементов управления страницы, поэтому сначала вам нужно найти заполнитель содержимого от мастера, а затем найти фактический элемент управления - например,

Master.FindControl("YourContentPlaceholderId").FindControl("ControlName");

Подробнее см. в этой статье .

1 голос
/ 14 апреля 2011

Где ваш ltlGenTime контроль?Я предполагаю, что это на главной странице.

Если это на главной странице, то вам нужно будет использовать

string date = ((Literal)webPage.Master.FindControl("ltlGenTime")).Text;
0 голосов
/ 14 апреля 2011

Попробуйте использовать эту рекурсивную функцию FindControl , которую я нашел здесь .

private Control FindControlRecursive(Control root, string id) 
{ 
    if (root.ID == id)
    { 
        return root; 
    } 

    foreach (Control c in root.Controls) 
    { 
        Control t = FindControlRecursive(c, id); 
        if (t != null) 
        { 
            return t; 
        } 
    } 

    return null; 
} 
0 голосов
/ 14 апреля 2011

Обратите внимание, что FindControl не выполняет рекурсивный поиск.Возможно, вам придется найти соответствующий контейнер, в котором он находится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...