asp.net自动在webform上生成文本框ID

时间:2011-09-26 10:29:24

标签: c# asp.net

我在 Visual Studio 上使用 C#。我想生成一个带有自动编号Textboxes webform ,具体取决于上一页的输入。这种循环的最佳方法是什么?

例如:

输入为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?

4 个答案:

答案 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循环创建控件需要提供的次数。

请记住,因为这些是动态控件,所以需要在回发期间重新创建它们,并且不会自动完成。

进一步Dynamic controls and postback

答案 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 );
}