我想在 asp.net 中构建一个订单窗口,其中包含一些标签、文本框和一个按钮 该按钮将被称为“添加更多项目”,按下它,标签和文本框将在旧的下重复. 这样我就可以控制我想添加多少产品。
问题: 1. 这可能吗?如何?2.还有其他合适的方法吗?
我想在 asp.net 中构建一个订单窗口,其中包含一些标签、文本框和一个按钮 该按钮将被称为“添加更多项目”,按下它,标签和文本框将在旧的下重复. 这样我就可以控制我想添加多少产品。
问题: 1. 这可能吗?如何?2.还有其他合适的方法吗?
问题: 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 来做同样的事情,这将节省到服务器的往返并且会更快。