您的位置:首页 > 编程语言 > ASP

使用Asp.net动态生成控件的使用总结

2011-07-14 18:19 731 查看
这几天有个需求是要求动态生成控件。由于对Asp.net不熟,开始时把我弄晕了,始终是第一次加载的控件,PostBack后就不存在了。
  原来,在页面刷新,上次动态生成的控件就没了,郁闷ing.......,要想动态的控件在每次PostBack后都能够显示在页面上,则每次PostBack都需要重新加载。每次加载就能够显示,Easy!!!

  但是新问题又来了,如果取值呢?FindControl可以找到控件,但是页面刷后不是又重新生成了控件吗,原来控件上的值还有吗,我想肯定没有了吧(我想的),那怎么取值,我又郁闷了!事实说明我所想的是错的,PostBack后,重新生成的控件,不但能够使控件重新显示出来,并且值仍然能够取到,当然前提是PostBack后生成的控件的ID和上次生成的要一致。至于为什么,原理方面的东西没搞太明白,正在研究,希望有高手朋友路过时,随便指点一下。

  一个小例子:

HTML页面代码:

<form id="Form1" method="post" runat="server">
<asp:Button id="Button1" style="Z-INDEX: 101; LEFT: 64px; POSITION: absolute; TOP: 184px" runat="server"
Text="增加一个TextBox"></asp:Button>
<asp:Button id="Button2" style="Z-INDEX: 102; LEFT: 248px; POSITION: absolute; TOP: 184px" runat="server"
Text="提取第一个TextBox的值 ==>" Width="200px"></asp:Button>
<asp:TextBox id="txt" style="Z-INDEX: 103; LEFT: 472px; POSITION: absolute; TOP: 184px" runat="server"
ReadOnly="True"></asp:TextBox>
</form>

CS代码:

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace UserRemindWindow.WebUI
{
/// <summary>
/// 动态添加控件_一_ 的摘要说明。
/// </summary>
public class 动态添加控件_一_ : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Button Button1;
protected System.Web.UI.WebControls.Button Button2;
protected System.Web.UI.WebControls.TextBox txt;
private ArrayList TextBoxsList
{
get
{
if(ViewState["myTextBoxsList"]==null)
return new ArrayList();
else
return (ArrayList)ViewState["myTextBoxsList"];
}
set
{
ViewState["myTextBoxsList"] = value;
}
}

private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if(Page.IsPostBack)
{
for(int i=0;i<this.TextBoxsList.Count;i++)
{
string txtID = this.TextBoxsList[i].ToString();
TextBox tmp = new TextBox();
tmp.ID = txtID;
Page.Controls[1].Controls.Add(tmp);
tmp.Text = Request.Form[txtID].ToString();
}
}

}

// private TextBox[][] MyTextBoxs = new TextBox[][]{new TextBox[]{},new TextBox[]{},new TextBox[]{}};
private void Button1_Click(object sender, System.EventArgs e)
{
TextBox tmp = new TextBox();
tmp.ID = "TextBox" + this.TextBoxsList.Count.ToString();
Page.Controls[1].Controls.Add(tmp);

ArrayList array = this.TextBoxsList;
array.Add(tmp.ID);
this.TextBoxsList = array;
}

private void Button2_Click(object sender, System.EventArgs e)
{
this.txt.Text = ((TextBox)Page.FindControl("TextBox0")).Text;
}

#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.Button2.Click += new System.EventHandler(this.Button2_Click);
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion

}
}

这个代码是CSDN论坛的朋友提供的,我自己的太长,就用这个了。作用是动态生成TextBox,并且用

tmp.Text = Request.Form[txtID].ToString(); 提取它的值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐