2015-02-16 6 views
0

Ниже мой кодНайти динамически создаваемые элементы управления внутри литерал в asp.net странице

- .aspx, файл

<div id="testDiv" runat="server"></div> 

- в .aspx.cs файл

Literal lit1 = new Literal(); 
lit1.Text = "<table class='allocTable'>"; 
lit1.Text += "<tr><td><input type='text' runat='server' id='testbox1'></input></td></tr>"; 
... some other controls <tr><td>... 
lit1.Text += "</table>" 
testDiv.Controls.Add(lit1); 

Теперь, как я могу найти testbox1 в файле .aspx.cs? Я использовал FindControl для testDiv и placeHolder, но он возвращает null.

Кажется, что текстовые поля не были добавлены в элемент управления страницы, но они только что были отображены.

ответ

1

Если вы хотите получить значение текстового поля в ответном сообщении, вы можете использовать Request.Form ["testbox1"].

Если вы хотите, чтобы wo работала с «реальными» элементами управления сервером, вы должны использовать asp: Panel в вашем aspx-файле вместо вашего div. В методе Init или Load asp.cs вы затем добавляете HtmlTable в коллекцию Panel.Controls, HtmlTableRow (s) в коллекцию HtmlTable.Rows и HtmlTableCell (s) в коллекцию HtmlTableRow.Cells.

При создании элементов управления ввода, которые вы добавляете в коллекцию Cell.Controls, вы можете хранить их в частных переменных-членах.

+0

Requst.Form ["textbox1"] пуст. кажется, когда вы добавляете элементы управления в литерал, они просто отображаются на стороне клиента, а сервер не о них. – user217648

+0

На обратной стороне должно быть значение. Вы можете проверить это, просмотрев отправленные данные с помощью инструментов dev вашего браузера. Кроме того, это может быть typo textbox1 versus testbox1 – schudel

+0

Я проверил тело запроса в инструментах dev (Network), и значения есть. но в SaveButton_Click значения пустые. Я прочитал статью, в которой говорится, что мне нужно создавать текстовые поля в Page_init, а не в Page_load, правильно? – user217648

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

  • Нет связанных вопросов^_^