注意:
1.aspx页面<%Page%>里必须添加EnableViewState="true",
使动态添加的控件状态可保存
2.动态添加的控件最好放在容器上(这里用Panel这个容器)
3.必须设置动态控件的ID,否则获取不到该控件
建议:运用Asp.net Ajax会有更好的用户体验效果
例子:
test2.aspx:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Test2.aspx.cs"
Inherits="Test2" Title="Untitled Page" EnableViewState="true" %>
<asp:Panel ID="Panel2" runat="server" Height="50px" Width="446px">
<asp:Label ID="Label1" runat="server" Text="Name1:"></asp:Label>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Label ID="Label2" runat="server" Text="Address1:"></asp:Label>
<asp:TextBox ID="TextBox2" runat="server" Width="149px"></asp:TextBox><br />
</asp:Panel>
<asp:Button ID="btnAddAjax" runat="server" Text="Add" OnClick="btnAddAjax_Click" />
<asp:Button id="btnShow" onclick="btnShow_Click" runat="server" Text="Show" />
<asp:Label id="lblMsg" runat="server">No Value</asp:Label>
Inherits="Test2" Title="Untitled Page" EnableViewState="true" %>
<asp:Panel ID="Panel2" runat="server" Height="50px" Width="446px">
<asp:Label ID="Label1" runat="server" Text="Name1:"></asp:Label>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Label ID="Label2" runat="server" Text="Address1:"></asp:Label>
<asp:TextBox ID="TextBox2" runat="server" Width="149px"></asp:TextBox><br />
</asp:Panel>
<asp:Button ID="btnAddAjax" runat="server" Text="Add" OnClick="btnAddAjax_Click" />
<asp:Button id="btnShow" onclick="btnShow_Click" runat="server" Text="Show" />
<asp:Label id="lblMsg" runat="server">No Value</asp:Label>
test2.aspx.cs
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class Test2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if(ViewState["txtName2"] != null && (bool)ViewState["txtName2"])
{
CreateMyControls();
}
}
protected void btnAddAjax_Click(object sender, EventArgs e)
{
CreateMyControls();
}
protected void btnShow_Click(object sender, EventArgs e)
{
if(ViewState["txtName2"]!=null)
{
TextBox txtName2 = Panel2.FindControl("txtName2") as TextBox;
if(txtName2 != null)
lblMsg.Text = "Name2= " + txtName2.Text;
}
if(ViewState["txtAddr2"]!=null)
{
TextBox txtAddr2 = Panel2.FindControl("txtAddr2") as TextBox;
if(txtAddr2 != null)
lblMsg.Text += " Addr2= " + txtAddr2.Text;
}
}
private void CreateMyControls()
{
Label lblName2 = new Label();
lblName2.Text = "Name2:";
TextBox txtName2 = new TextBox();
//设置ID,否则不能获取到值
txtName2.ID = "txtName2";
//可视状态,否则PostBack后动态添加的控件会不见
ViewState["txtName2"]= true;
Label lblAddr2 = new Label();
lblAddr2.Text = "Addr2:";
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class Test2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if(ViewState["txtName2"] != null && (bool)ViewState["txtName2"])
{
CreateMyControls();
}
}
protected void btnAddAjax_Click(object sender, EventArgs e)
{
CreateMyControls();
}
protected void btnShow_Click(object sender, EventArgs e)
{
if(ViewState["txtName2"]!=null)
{
TextBox txtName2 = Panel2.FindControl("txtName2") as TextBox;
if(txtName2 != null)
lblMsg.Text = "Name2= " + txtName2.Text;
}
if(ViewState["txtAddr2"]!=null)
{
TextBox txtAddr2 = Panel2.FindControl("txtAddr2") as TextBox;
if(txtAddr2 != null)
lblMsg.Text += " Addr2= " + txtAddr2.Text;
}
}
private void CreateMyControls()
{
Label lblName2 = new Label();
lblName2.Text = "Name2:";
TextBox txtName2 = new TextBox();
//设置ID,否则不能获取到值
txtName2.ID = "txtName2";
//可视状态,否则PostBack后动态添加的控件会不见
ViewState["txtName2"]= true;
Label lblAddr2 = new Label();
lblAddr2.Text = "Addr2:";