0

我想在 asp.net 中构建一个订单窗口,其中包含一些标签、文本框和一个按钮 该按钮将被称为“添加更多项目”,按下它,标签和文本框将在旧的下重复. 这样我就可以控制我想添加多少产品。

问题: 1. 这可能吗?如何?2.还有其他合适的方法吗?

4

1 回答 1

0

问题: 1. 这可能吗?如何?

回答。是的,这是可能的,在这里你怎么能做到。

  1. 从 1 个标签、1 个文本框、2 个按钮和 2 个面板开始

    <asp:Panel ID="Panel1" runat="server">
     <asp:Label ID="Label1" runat="server" Text="Item1"></asp:Label>
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
    </asp:Panel>
    <asp:Panel ID="Panel2" runat="server">
        <asp:Button ID="Button1" runat="server" Text="Add more Item" onclick="Button1_Click" />
        <asp:Button ID="Button2" runat="server" onclick="Button2_Click" Text="Submit" />
    </asp:Panel>
    

后端代码将是

 protected void Page_Init(object sender, EventArgs e)
 {
      if (!Page.IsPostBack)
      {
           Session["cnt"]= null;
      }
      if (Session["cnt"]!=null)
      {
           int cnt = (int)Session["cnt"];//get how many items are already there and add them to page
           for (int i = 0; i < cnt; i++)
           {
                TextBox tb = new TextBox();
                tb.ID = "tb" + i.ToString();
                Label lb = new Label();
                lb.ID = "lb" + i.ToString();
                lb.Text = "item " + (i + 2).ToString();
                Panel1.Controls.Add(lb);
                Panel1.Controls.Add(tb);
           }

      }


 }
protected void Button1_Click(object sender, EventArgs e)
{
     int cnt = 0;
     if (Session["cnt"] != null)
     {
          cnt = (int)Session["cnt"];
     }
     cnt++;
     TextBox tb = new TextBox();
     tb.ID = "tb" + cnt.ToString();
     Label lb = new Label();
     lb.ID = "lb" + cnt.ToString();
     lb.Text = "item " + (cnt + 2).ToString();
     Panel1.Controls.Add(lb);
     Panel1.Controls.Add(tb);

     Session["cnt"] = cnt;
}
protected void Button2_Click(object sender, EventArgs e)
{
     int cnt = 0;
     if (Session["cnt"] != null)
     {
          cnt = (int)Session["cnt"];
     }
     for (int i = 0; i < cnt; i++)
     {
          TextBox tb = (TextBox)Panel1.FindControl("tb" + i.ToString());
          Label lb = (Label)Panel1.FindControl("lb" + i.ToString());
          if (tb!=null&&lb!=null)
          {
               Response.Write(lb.Text + " - " + tb.Text + "<br/>");
          }
     }
}

问题2.还有其他合适的方法吗?答:这取决于上下文。您可以使用 javascript 来做同样的事情,这将节省到服务器的往返并且会更快。

于 2013-08-22T10:35:56.243 回答