在webform上自动生成文本框ID

本文关键字:ID 文本 自动生成 webform | 更新日期: 2023-09-27 18:09:44

我在Visual Studio上使用 c# 。我想生成一个webform与自动编号的Textboxes取决于从前一页的输入。做这个循环的最好方法是什么?

例如:

输入为4

下一页应该生成ID为

的文本框
  • "name1"
  • "name2"
  • "name3"
  • "name4"

像这样:

<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?

在webform上自动生成文本框ID

使用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
       {
       }
   }
}

您可以在Page Init事件处理程序中通过say循环来创建这些控件,以确定控件需要可用的次数。

请记住,由于这些是动态控件,它们需要在回发时重新创建,而不会自动完成。

进一步动态控制和回发

检查此代码。在第一页…

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);
            }
    }
for ( int i=0; i<4; i++ )
{
   TextBox t = new TextBox();
   t.ID = "name" + i.ToString();
   this.Controls.Add( t );
}