我在 Visual Studio 上使用 C#。我想生成一个带有自动编号Textboxes
的 webform ,具体取决于上一页的输入。这种循环的最佳方法是什么?
例如:
输入为4
下一页应生成ID为
的文本框这样的事情:
<asp:TextBox ID="name1" runat="server"></asp:TextBox>
<asp:TextBox ID="name2" runat="server"></asp:TextBox>
<asp:TextBox ID="name3" runat="server"></asp:TextBox>
<asp:TextBox ID="name4" runat="server"></asp:TextBox>
我的问题的第2部分是,如果我想在点击Button
时调用它们,我应该如何使用循环来获取这些ID?
答案 0 :(得分:2)
使用for循环和PlaceHolder
控件来创建动态TextBox
控件
<asp:PlaceHolder ID="phDynamicTextBox" runat="server" />
int inputFromPreviousPost = 4;
for(int i = 1; i <= inputFromPreviousPost; i++)
{
TextBox t = new TextBox();
t.ID = "name" + i.ToString();
}
//on button click retrieve controls inside placeholder control
protected void Button_Click(object sender, EventArgs e)
{
foreach(Control c in phDynamicTextBox.Controls)
{
try
{
TextBox t = (TextBox)c;
// gets textbox ID property
Response.Write(t.ID);
}
catch
{
}
}
}
答案 1 :(得分:1)
您可以在Page Init
事件处理程序中通过say循环创建控件需要提供的次数。
请记住,因为这些是动态控件,所以需要在回发期间重新创建它们,并且不会自动完成。
答案 2 :(得分:1)
检查此代码。 在第一页......
protected void Button1_Click(object sender, EventArgs e)
{
Response.Redirect("Default.aspx?Name=" + TextBox1.Text);
}
在第二页中,您可以从querystring获取值并动态创建控件
protected void Page_Load(object sender, EventArgs e)
{
if (Request.QueryString["Name"] != null)
Response.Write(Request.QueryString["Name"]);
Int32 howmany = Int32.Parse(Request.QueryString["Name"]);
for (int i = 1; i < howmany + 1; i++)
{
TextBox tb = new TextBox();
tb.ID = "name" + i;
form1.Controls.Add(tb);
}
}
答案 3 :(得分:0)
for ( int i=0; i<4; i++ )
{
TextBox t = new TextBox();
t.ID = "name" + i.ToString();
this.Controls.Add( t );
}