Если вы получаете нулевое значение, а не исключение, то это означает, что Page
оценивается правильно. Тем не менее, то, что не может быть, это
PlaceHolder PH = (PlaceHolder)pg.FindControl("PHolder");
Маловероятно, что элемент управления PHolder действительно принадлежит странице. Скорее всего, этот контроль принадлежит некоторому дочернему контролю. Метод FindControl()
не является рекурсивной функцией. Он будет смотреть только в той коллекции элементов управления, которая ему непосредственно принадлежит. Чтобы это работало, вам нужно будет либо передать фактический родительский элемент управления, где вы ожидаете найти этот PHolder, либо перегрузить / расширить метод FindControl в System.Web.UI.Page (или ваш базовый класс, если вы его используете) быть рекурсивным. Будьте осторожны с этим методом, потому что у страниц может быть МНОГО элементов управления, и этот тип рекурсии может оказаться решающим.
Если элемент управления PHolder является общим для всех ваших страниц, может быть неплохо поместить свойство в базовый класс, который содержит ссылку на этот объект PHolder, и получить к нему доступ таким образом.