在ASP.NET中的代码隐藏中读取动态生成的HTML元素值

我有一个asp.net页面,我有以下标记。 基本上,这个标记是通过从表中读取记录并循环遍历代码来生成的。 对于表中的每条记录,都会有一个div块。

基本上,此表单用于读取/显示用户的设置。 设置条目存储在表格中。

Name
Domain name
URL
Some other value is enabled ?

每个输入元素的id都是唯一的。 现在在代码隐藏中,我想读取每个输入元素的值以保存用户所做的更改。 我怎样才能阅读这里的元素? 由于标记在代码隐藏中生成为字符串并附加了外部div的INNER HTML,因此我无法读取像我们在IDE中拖放的控件那样的值。

如果这些是在标准HTTP POST中发送回页面,那么您可以读取Request.Form NameValueCollection的值。

从本质上讲,所有成为表单元素的服务器控件都会像在那里一样被转换为标准HTML表单元素,尽管.NET会生成更多标记以帮助识别它们。 然后它会在回发时自动将它们的值映射回服务器控件,但值本身仍然只是标准的HTTP POST,您可以手动访问它们。

(这也是将表单从一个ASP .NET应用程序发布到另一个ASP .NET应用程序时使用的常用方法。)

如果要获取生成的控件的值,则必须执行两项操作。

  1. 为每个控件生成带有runat =’server’标记的输入控件(否则它们将不会包含在Request.Forms集合中。)这可能是您缺少的步骤。

  2. 在回发时从Request.Form集合中获取值

    string txtValue1 = Request.Form["txtName1"];

它应该很容易。 我使用DIV作为容器和一个简单的javascript将控制字符串注入innerHTML,对你的代码进行了测试。 如果您遇到任何问题,可能需要调试并查看动态控件ID是否因为将其插入命名容器或其他内容而发生了更改。

因此,故事的主要内容是,当您在Page_Init之后动态添加控件时,POSTBACK值无法插回到这些控件中。

CF: http : //www.15seconds.com/issue/020102.htm和http://msdn.microsoft.com/en-us/library/ms178472.aspx

这里的一些其他答案建议“哦,在控件中添加一个runat = server”,但是当你在代码隐藏中创建它时,而不是在Page_Init中创建它时,那就会使ZERO产生差异。

让我知道如果你不是如何创建控件,或者如果不是你如何使用它们,我会在更多细节上修改这个答案。 这一切都归结为你如何尝试访问这些价值观。

通常,您将动态创建的输入控件(在本例中为TextBox)放置在面板控件(容器)之类的内容中。 然后在用户发布数据后,您将循环该容器panel.Controls集合并检索每个TextBox文本。

请注意,在使用动态创建的控件时会有一些注意事项,因为ASP具有无状态特性。

此页面显示了如何实现此目的:

使用TextBoxes在ASP.Net GridView控件中添加动态行

我没有测试它,但我可以建议:

使用runat =“server”(例如面板控件)在另一个控件中添加带有runat =“server”标签的动态控件。 然后您可以像这样访问它们:

 Textbox t = (Textbox)panel1.controls.findControl("dynamicControlId");