【问题标题】:Find dynamically created controls inside Literal in asp.net page在 asp.net 页面中的 Literal 中查找动态创建的控件
【发布时间】:2015-02-16 14:40:04
【问题描述】:

以下是我的代码

-- .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);

现在如何在 .aspx.cs 文件中找到 testbox1?我在 testDiv 和 placeHolder 上使用了 FindControl,但它返回 null。

似乎文本框尚未添加到页面控件,但它们刚刚被渲染。

【问题讨论】:

    标签: webforms findcontrol dynamic-controls


    【解决方案1】:

    如果您想在回发时获取文本框的值,可以使用 Request.Form["testbox1"]。

    如果您想使用“真正的”服务器控件,您可以在您的 aspx 文件中使用 asp:Panel 而不是您的 div。 然后在 asp.cs Init 或 Load 方法中,您将向 Panel.Controls 集合添加 HtmlTable,将 HtmlTableRow(s) 添加到 HtmlTable.Rows 集合,将 HtmlTableCell(s) 添加到 HtmlTableRow.Cells 集合。

    当您创建要添加到 Cell.Controls 集合中的输入控件时,您可以将它们存储在私有成员变量中。

    【讨论】:

    • Requst.Form["textbox1"] 为空。似乎当您将控件添加到文字时,它们只是在客户端呈现,而服务器并不关心它们。
    • 回发时,值应该在那里。您可以通过使用浏览器的开发工具查看发送的数据来检查这一点。此外,它可能是一个错字 textbox1 与 testbox1
    • 我在开发工具(网络)中检查了请求正文,并且值在那里。但在 SaveButton_Click 中的值为空。我读了一篇文章说我必须在 Page_init 而不是在 Page_load 中创建文本框,对吗?
    • 我将您的答案标记为答案,因为它帮助我定位了问题。我在 if(!Page.PosteBack) 中添加了创建动态文本框的方法。
    猜你喜欢
    • 2017-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多