findcontrol в классе .cs из webcontrol - PullRequest
1 голос
/ 09 ноября 2011

У меня есть несколько webusercontrols ".ascx", и я хочу поместить некоторый код в класс функций в папке App_Code, однако, когда я пытаюсь этот код, я продолжаю получать "Ссылка на объект не установлена ​​на экземпляр объекта."

 public static void Layout()
    {
    Page pg = (Page)HttpContext.Current.Handler;
    PlaceHolder PH = (PlaceHolder)pg.FindControl("PHolder");
}

Ответы [ 2 ]

0 голосов
/ 09 ноября 2011

Не совсем уверен, поможет ли это, но у меня есть ascx, который вызывает функцию на странице aspx, и эта функция делает все, что мне нужно ..

//ascx

protected void btnSave_Click(object sender, EventArgs e)
{
((aspxpage)this.Page).functionName();
}

//aspx

public void functionName()
{
//Call function in app_code class
}
0 голосов
/ 09 ноября 2011

Если вы получаете нулевое значение, а не исключение, то это означает, что Page оценивается правильно. Тем не менее, то, что не может быть, это

PlaceHolder PH = (PlaceHolder)pg.FindControl("PHolder");

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

Если элемент управления PHolder является общим для всех ваших страниц, может быть неплохо поместить свойство в базовый класс, который содержит ссылку на этот объект PHolder, и получить к нему доступ таким образом.

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