我有一个asp.net页面,我有以下标记。基本上,这个标记是通过从表中读取记录并循环遍历代码来生成的。对于表中的每条记录,都会有一个div块。
基本上,此表单用于读取/显示用户的设置。设置条目存储在表格中。
<div id='divContainer' runat='server'>
<div id='div1' runat='server'>
<table>
<tr>
<th>Name</th>
<td><input type='text' id='txtName1' value='something' /></td>
</tr>
</table>
</div>
<div id='div2' runat='server'>
<table>
<tr>
<th>Domain name</th>
<td><input type='text' id='txtName2' value='something' /></td>
</tr>
</table>
</div>
<div id='div3' runat='server'>
<table>
<tr>
<th>URL</th>
<td><input type='text' id='txtName3' value='something' /></td>
</tr>
</table>
</div>
<div id='div4' runat='server'>
<table>
<tr>
<th>Some other value is enabled ?</th>
<td><input type='checkbox' id='chk4' /></td>
</tr>
</table>
</div>
</div>
每个输入元素的id都是唯一的。现在在代码隐藏中,我想读取每个输入元素的值以保存用户所做的更改。我怎样才能阅读这里的元素?由于标记在代码隐藏中生成为字符串并附加了外部div的INNER HTML,因此我无法读取像我们在IDE中拖放的控件那样的值。
答案 0 :(得分:4)
如果在标准HTTP POST中将这些文件发送回页面,则可以阅读Request.Form
NameValueCollection
中的值。
基本上,所有成为表单元素的服务器控件都会像在那里一样被转换为标准HTML表单元素,尽管.NET会生成更多标记以帮助识别它们。然后它会在回发时自动将它们的值映射回服务器控件,但值本身仍然只是标准的HTTP POST,您可以手动访问它。
(这也是将表单从一个ASP .NET应用程序发布到另一个ASP .NET应用程序时使用的常用方法。)
答案 1 :(得分:1)
如果你想获取生成的控件的值,你必须做两件事。
为每个控件生成带有runat ='server'标记的输入控件(否则它们将不会包含在Request.Forms集合中。)这可能是您缺少的步骤。
<input type='text' id='txtName1' runat='server' value='something' />
从postback上的Request.Form集合中获取值
string txtValue1 = Request.Form["txtName1"];
真的应该那么容易。我使用DIV作为容器和一个简单的javascript将控制字符串注入innerHTML,对你的代码进行了测试。如果您遇到任何问题,可能需要调试并查看动态控件ID是否因为将它们插入命名容器或其他内容而发生了更改。
答案 2 :(得分:0)
通常,您将动态创建的输入控件(在本例中为TextBox)放置在面板控件(容器)之类的内容中。然后在用户发布数据后,您将循环该容器panel.Controls
集合并检索每个TextBox文本。
请注意,在使用动态创建的控件时会有一些注意事项,因为ASP具有stateless性质。
此页面显示了如何实现此目的:
Adding Dynamic Rows in ASP.Net GridView Control with TextBoxes
答案 3 :(得分:0)
故事的主要内容是,当您在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产生差异。
请告诉我,如果不你是如何创建控件的,或者不是你是如何使用它们的,我会在更多细节上修改这个答案。这一切都归结为你如何尝试访问这些价值观。
答案 4 :(得分:-1)
我没有测试它,但我可以建议:
使用runat =“server”(例如面板控件)在另一个控件中添加带有runat =“server”标签的动态控件。然后你可以像这样访问它们:
Textbox t = (Textbox)panel1.controls.findControl("dynamicControlId");