在我的aspx上我有
<div id ="div1" runat="server"></div>
<div id ="div2" runat="server"></div>
等
和后面的代码在这些除数中创建文本框,如此
protected void Page_Load(object sender, EventArgs e){
for (int i = 1; i < 11; i++)
{
Control ctrl = FindControlRecursive(Page, string.Format("div{0}", i));
System.Web.UI.HtmlControls.HtmlGenericControl ctrl2 = (System.Web.UI.HtmlControls.HtmlGenericControl)ctrl;
TextBox tbt = new TextBox();
tbt.Attributes.Add("placeholder", "Title");
tbt.ID = string.Format("page{0}", i);
ctrl2.Controls.Add(tbt);
ctrl2.Controls.Add(new LiteralControl(" "));
TextBox tbu = new TextBox();
tbu.Attributes.Add("placeholder", "URL");
tbu.ID = string.Format("page{0}url", i);
ctrl2.Controls.Add(tbu);
等等。
我的问题是:如何在用户点击提交按钮后从这些文本框中检索文本?
我在stackoverflow中浏览过,但我还没有找到解决方案。
我已经使用以下代码(基于一些stackoverflow主题)摆弄了一点:
protected string GetTextBoxValues(object sender, EventArgs e)
{
string message = "";
foreach (TextBox textBox in Controls.OfType<TextBox>())
{
message += textBox.ID + ": " + textBox.Text + "\\n";
}
return message;
}
然后在submit_click中打印出值:
Response.Write(GetTextBoxValues(sender, e));
但这不会给我任何东西
基本上,我想要读取每个div中的所有值(包含大约6个文本框),用分号分隔,这样我就可以进一步操作数据
答案 0 :(得分:0)
Controls.OfType<TextBox>
是一种很好的方法,但它不是递归方法。它将查看文本框页面的顶部。您已将它们添加到具有“有意义”名称div1
和div2
的子容器中,因此请使用:
var allTextBoxes = div1.Controls.OfType<TextBox>().Concat(div2.Controls.OfType<TextBox>());
foreach (TextBox textBox in allTextBoxes)
{
message += textBox.ID + ": " + textBox.Text + "\\n";
}
您可以使用递归方法,但我强烈反对它。您可能会找到不想包含的文本框。
请注意,您必须在Page_Init
和每次回发中创建动态控件。
答案 1 :(得分:-1)
最简单但不优雅的方法是将其ID设置为静态,然后直接从Request.Form集合中读取。
要使ID保持静态,请添加:
tbt.ClientIDMode = System.Web.UI.ClientIDMode.Static;
然后阅读提交的值:
Request.Form.Keys.OfType<string>().ToList().FindAll(k => k.StartsWith("page")).ForEach(inputName =>
{
var value = Request.Form[inputName];
var index = Int32.Parse(inputName.Substring(4));
//handle value...
});
您可以轻松地将其放入Dictonary对象中,以便快速访问索引:
Dictionary<int, string> pageValues = new Dictionary<int, string>();
Request.Form.Keys.OfType<string>().ToList().FindAll(k => k.StartsWith("page")).ForEach(inputName =>
{
var value = Request.Form[inputName];
var index = Int32.Parse(inputName.Substring(4));
pageValues.Add(index, value);
});