C# 动态创建文本框,每次用户单击按钮时添加一个额外的文本框

C# 动态创建文本框,每次用户单击按钮时添加一个额外的文本框,c#,asp.net,textbox,C#,Asp.net,Textbox,我正在尝试在ASP.NET中动态创建文本框,我的代码没有按预期的方式工作 <%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> public int TextBoxCount

我正在尝试在ASP.NET中动态创建文本框,我的代码没有按预期的方式工作

<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
public int TextBoxCount
{
    get
    {
        if (ViewState["tbCount"] == null)
        {
            ViewState["tbCount"] = 0;
        }
        return Convert.ToInt32(ViewState["tbCount"]);
    }
    set
    {
        int viewState = TextBoxCount;
        if (Int32.TryParse(value.ToString(), out viewState))
        {
            ViewState["tbCount"] = value;
        }
    }
}

protected void Page_Init(object sender, EventArgs e)
{
    if (TextBoxCount == 0)
    {
        AddTextBox();
    }
    else
    {
        RecreateTextBoxes();
    }
}

private void AddTextBox()
{
    TextBox tb = new TextBox();
    tb.ID = "tb" + TextBoxCount++;
    Panel1.Controls.Add(tb);
}

private void RecreateTextBoxes()
{
    for (int i = 0; i < TextBoxCount; i++)
    {
        TextBox tb = new TextBox();
        tb.ID = "tb" + i;
        Panel1.Controls.Add(tb);
    }
}

protected void btnAdd_Click(object sender, EventArgs e)
{
    AddTextBox();
}


protected void btnDisplayText_Click(object sender, EventArgs e)
{
    for (int i = 0; i < TextBoxCount; i++)
    {
        TextBox tb = (TextBox)Page.FindControl("Panel1").FindControl("tb" + i);

        if (tb != null)
        {
            lblText.Text += "," + tb.Text;
        }
    }
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:Label ID="lblText" runat="server" />
<div>
    <asp:Panel ID="Panel1" runat="server">
    </asp:Panel>
</div>
<asp:Button ID="btnDisplayText" runat="server" Text="Display Text" onclick="btnDisplayText_Click" />
<asp:Button ID="btnAdd" runat="server" Text="Add" onclick="btnAdd_Click" />
</form>
</body>
</html>

公共int TextBoxCount
{
得到
{
如果(ViewState[“tbCount”]==null)
{
ViewState[“tbCount”]=0;
}
返回Convert.ToInt32(ViewState[“tbCount”]);
}
设置
{
int viewState=TextBoxCount;
if(Int32.TryParse(value.ToString(),out-viewState))
{
ViewState[“tbCount”]=值;
}
}
}
受保护的无效页_Init(对象发送方,事件参数e)
{
如果(TextBoxCount==0)
{
AddTextBox();
}
其他的
{
重新创建文本框();
}
}
私有void AddTextBox()
{
TextBox tb=新的TextBox();
tb.ID=“tb”+TextBoxCount++;
面板1.控制。添加(tb);
}
私有void重新创建文本框()
{
对于(int i=0;i
我试图做的是在用户每次单击
btnAdd
按钮时动态创建一个新的文本框。然后,
btnDisplayText
按钮应连接每个文本框中的所有文本,并将其显示在
lblText

谢谢你的帮助

使用

int TextBoxID=0;
TextBox textBox = new TextBox();

TextBox.ID="TextBox"+TextBoxID.ToString();

btnDisplayText.Text +=textBox.Text;

lblText.Text=btnDisplayText.Text;

TextBoxID++;
而不是

TextBox tb = (TextBox)Page.FindControl("Panel1").FindControl("tb" + i);
在显示文本中单击

此外,删除除
ViewState[“tbCount”]=value之外的所有代码来自
TextBoxCount
setter

更新:


ViewState
Page\u Init
中不可用。将您的
Page\u Init
code移动到
Page\u Load

您能告诉我们发生了什么吗?即使这不是您想要的吗?谢谢您的回复,但这仍然不起作用。我希望能够用add按钮添加无限多的文本框,这段代码不会改变我原来的代码,因为当有两个文本框时,再次单击add不会做任何事情。
TextBox tb = (TextBox)Page.FindControl("Panel1").FindControl("tb" + i);