【问题标题】:Add multiple textbox .net添加多个文本框.net
【发布时间】:2013-05-21 15:02:12
【问题描述】:

我开始 .net 并开始我将动态创建多个文本框。

我写了这个:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Page sans titre</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Button ID="Button1" runat="server" Text="Button" onclick="OnclickButton" />
    </div>
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
    <br />
    </form>
</body>
</html>

还有这个

namespace WebApplication1
{
    public partial class _Default : System.Web.UI.Page
    {    
        protected void Page_Load(object sender, EventArgs e)
        {

        }
        protected void OnclickButton(object sender, EventArgs ea)
        {
            Random random = new Random();
            int randomNumber = random.Next(0, 100);

            Button btnSomeButton = sender as Button;
            btnSomeButton.Text = "I was clicked!" + randomNumber;

            TextBox txt = new TextBox();
            txt.ID = "txt_" + randomNumber;
            form1.Controls.Add(txt);
        }    
    }
}

我不明白为什么当我在 Button1 上单击 2 次时只出现 1 个文本框。

为什么会有这种行为? 做我想做的事的好方法是什么? 提前谢谢你

【问题讨论】:

  • 我知道您的代码可能仅用于演示,但您也有风险尝试创建 2 个具有相同 ID 的控件...
  • 是的,我知道,正如您所说,它是用于演示的。感谢您的评论,这迫使我从一开始就正常工作

标签: c# asp.net


【解决方案1】:

每次您单击该按钮时,它都会返回一个帖子。在postbacks阅读这篇文章

系统在任何时候只能处理一个回发。它需要等待回发返回才能处理另一个操作。

还可以阅读Page lifecycle

【讨论】:

    【解决方案2】:

    Web 是无状态的。换句话说,服务器不知道动态添加了多少控件,除非您存储信息以在回发时持久化。

    因此,您希望将数据保存到 ViewState(或 SessionState),然后以相同的 id 重新加载它们 回发。

    <asp:Button ID="Button1" runat="server" Text="Button" 
      OnClick="Button1_Click"/>
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
    
    private List<int> ControlIds
    {
        get { return (List<int>) ViewState["ControlIds"] ?? new List<int>(); }
        set { ViewState["ControlIds"] = value; }
    }
    
    protected void Page_Load(object sender, EventArgs e)
    {
        if (IsPostBack)
        {
            // Reload the controls on post back
            var ids = ControlIds;
            foreach (var id in ids)
            {
                var txt = new TextBox {ID = "txt_" + id};
                form1.Controls.Add(txt);
            }
        }
    }
    
    protected void Button1_Click(object sender, EventArgs e)
    {
        var random = new Random();
        int randomNumber = random.Next(0, 100);
    
        var ids = ControlIds;
        if (ids.Contains(randomNumber))
        {
            // Randam number already exists.
            // We cannot add controls with same ID.
            return;
        }
    
        ids.Add(randomNumber);
        ControlIds = ids;
    
        var btnSomeButton = sender as Button;
        btnSomeButton.Text = "I was clicked!" + randomNumber;
    
        var txt = new TextBox
            {
                ID = "txt_" + randomNumber,
                Text = randomNumber.ToString() // Just for testing
            };
        form1.Controls.Add(txt);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多