2013-09-16 3 views
0

У меня есть подобный кодASP.net FindControl возвращает нуль

protected void Button1_Click(object sender, EventArgs e) 

{ 
      Table t = new Table() ; 
      t.ID = "T1"; 
      t.Visible = true; 
      MyPanel.Controls.Add(t); 
} 

protected void Button2_Click(object sender, EventArgs e) 

{ 
      Table t = (Table)MyPanel.FindControl("T1"); 
} 

У меня есть проблема там: Table t = (Table)MyPanel.FindControl("T1");

В переменном т, то теперь ссылаться на нуль. Мне кажется, что приложение не знает о сгенерированном кодом . Должен ли я «регистрировать» таблицу где-то еще, кроме только для MyPanel? Спасибо за ответы.

EDIT Более подробная информация о проблеме

У меня есть простая страница без masterPage.There является Gridview с номерами. Эти цифры означают, сколько строк и ячеек будет иметь новый TAble. Когда пользователь выбирает строку, я хочу создать соответствующую таблицу, и после нажатия второй кнопки мне нужно собрать информацию из таблицы. OnInit или PreRender Я не знаю, сколько строк мне понадобится. Означает ли это, что моя проблема технически невозможна?

+1

Прежде всего вы добавляете таблицу в Panel1 и находите ее в MyPanel. Как вы найдете таблицу? –

+0

На всякий случай, если ваш образец не является полным представлением, обратите внимание на то, что 'FindControl' ищет только глубину 1-го уровня детей - вам может потребоваться повторная регистрация более детальных элементов управления - см. Http://stackoverflow.com/questions/8589950/findcontrol -return-null – StuartLC

+0

Но я точно знаю, что такое родитель и ребенок, или я ошибаюсь? – Foxxed

ответ

0

У вас есть Panel1, но вы ищете таблицу под названием MyPanel ??

protected void Button2_Click(object sender, EventArgs e) 
{ 
      Table t = (Table)Panel1.FindControl("T1"); 
} 

Это вы должны получить таблицу

EDIT

Ok я откопал какой-то старый WebForms материал, который делает exacly это.

НО вы должны добавить свою таблицу в событие инициализации или preInit страницы, если вы хотите позже взаимодействовать с ней в коде. И у вас есть Recreate conrol на каждой обратной передаче.

public static Control FindControlRecursive(Control root, string id) 
{ 
    if (root.id == id) 
     return root; 
    foreach (Control ctrl in root.Controls) 
    { 
     Control FoundCtl = FindControlRecursive(ctrl, id); 
     if (FoundCtl != null) 
      return FoundCtl; 
    } 
    return null; 
} 

И вы можете использовать его как это.

table myTable = FindControlRecursive(this.Master, "T1") as Table 
+0

Спасибо, я исправил его. Все еще не работает. – Foxxed

+0

Вы используете мастер-страницы? И есть кнопка1 и button2 в том же файле page/cs? – Archlight

+0

У меня есть простая страница без masterPage. Есть Gridview с цифрами. Эти цифры означают, сколько строк и ячеек будет иметь новый TAble. Когда пользователь выбирает строку, я хочу создать \t соответствующую таблицу, а после нажатия второй кнопки мне нужно собрать информацию из таблицы. OnInit или PreRender Я не знаю, сколько строк мне понадобится. Означает ли это, что моя проблема технически невозможна? – Foxxed

0

сделать код OnPreRender

protected override void OnPreRender(EventArgs e) 
    { 
      Table t = new Table() ; 
      t.ID = "T1"; 
      t.Visible = true; 
      MyPanel.Controls.Add(t); 
    } 
+0

Спасибо, это работает, но мне нужно, чтобы он работал на Button_click – Foxxed

-3

ctl00 $ ContentPlaceHolder1 $ UrunlerRAjax1 $ rptCustomers

ContentPlaceHolder -> UserControl -> повторитель

Repeater rptCustomers = this.Page.Master.FindControl("ContentPlaceHolder1").FindControl("UrunlerRAjax1").FindControl("rptCustomers") as Repeater; 

повторитель rptCustomers = это. Page.Master.FindControl ("ContentPlaceHolder1"). FindControl ("UrunlerRAjax1"). FindControl («rptCustomers») в качестве ретранслятора;

Repeater repaterName = this.Page.Master.FindControl ("ContentName"). FindControl ("UsercontrolName"). FindControl ("repeataterName") как Repeater;

+0

Это не социальная сеть, чтобы приветствовать людей! Пожалуйста, отформатируйте свои ответы на основе рекомендаций и предоставите правильные, высококачественные данные для ответа, который вы хотите написать. – Neeku

Смежные вопросы