Asp.Net动态添加控件,并获取其值
2010-07-13 16:20
543 查看
对于很多时候,我们在开发的时候,需要动态添加控件,包括Html控件,Asp.Net 控件。
js生成html控件
function AddProperty()
{
var count = document.getElementById('hidCount').value;
var str = "<BR> 属性名称:<input type=/"Text/" id=/"txtProperty"+count+"/" name=/"txtProperty"+count+"/" /> 属性描述:<input type=/"Text/" id=/"txtDesc"+count+"/" name=/"txtDesc"+count+"/" />";
count++;
document.getElementById('hidCount').value=count;
document.getElementById('catePro').innerHTML+=str;
}
因为要为生成的控件要能取其值,所以,必须必须指定其ID,可以先在页面放一个HiddenField控件,并指定默认值为0;当动态添加控件时,可以通过JS脚本改变其值,脚本如上。
<asp:HiddenField ID="hidCount" Value="0" runat="server" />
在页面 后台,可以通过以下方式取其值,如下:
int count = int.Parse(this.hidCount.Value);//取得生成控件的个数,保存在页面的HiddenField中,并可以得知其ID
for (int i = 0; i < count; i++)
{
string propName = string.Empty;
string propDesc = string.Empty;
if (!string.IsNullOrEmpty(Request["txtProperty" + i]))//判断是否存在
{
PIM.Model.CateProperty model = new PIM.Model.CateProperty();
propName = Request["txtProperty" + i].ToString();//,取得生成的控件的值
propDesc = Request["txtDesc" + i].ToString();
//......
}
}
二、动态生成Asp.Net服务器控件,并取其值
private void LoadProperty(int cateId)
{
HtmlGenericControl span = new HtmlGenericControl();
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
StringBuilder strHtml = new StringBuilder();
if (i % 2 == 0)
{
strHtml.Append("<div >");
strHtml.Append("<div class=/"layout1/">");
}
else
{
strHtml.Append("<div >");
}
TextBox txt = new TextBox();
Label lbl = new Label();
HiddenField hdf = new HiddenField();//
lbl.ID = "lblProp" + i.ToString();
lbl.Text = ds.Tables[0].Rows[i]["PropName"].ToString() + ":";
txt.ID = "txtProp" + i.ToString();
hdf.ID = "hdfProp" + i.ToString();//
lbl.EnableViewState = true;
txt.EnableViewState = true;
hdf.EnableViewState = true;//
LiteralControl lc = new LiteralControl(strHtml.ToString());
lc.EnableViewState = true;
span.Controls.Add(lc);
span.Controls.Add(lbl);
span.Controls.Add(txt);
span.Controls.Add(hdf);//
if (i % 2 == 0)
{
span.Controls.Add(new LiteralControl("</div></div>"));
}
else
{
span.Controls.Add(new LiteralControl("</div>"));
}
}
}
动态生成的控件,当点击页面按钮时会刷新页面,所以,生成控件的方法不需要
if(!IsPostBack)
{
}
如果在PageLoad方法中,即使每回都动态加载都无法得到其数据,且动态生成的控件会消失,所以,根据Asp.Net生命周期,我们将生成控件在OnInit()方法中,
即重写此方法
protected override void OnInit(EventArgs e)
{
LoadProperty(cateID);//在OnInit中执行动态添加控件的方法,这样就会保存其状态视图
}
如果这些动态生成的控件,在生成的时候,就需要从数据库中取值,并为其赋值,可以在PageLoad中进行赋值操作,
这时就可以使用(!IsPostBack),且不会丢失其值。
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
if (!string.IsNullOrEmpty(Request["productId"]))
{
string productId = Request["productId"].ToString();
int parentId = int.Parse(ParentID);
LoadData(productId, parentId);//可以用方法对其赋值。。。具体实现省略。
}
}
}
其他:动态添加控件和事件
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
CreatedRadio();
}
private void CreatedRadio()
{
RadioButton rad = new RadioButton();
rad.Text = "Test";
rad.AutoPostBack = true;
rad.CheckedChanged += new EventHandler(rad_CheckedChanged);
phl.Controls.Add(rad);
}
void rad_CheckedChanged(object sender, EventArgs e)
{
RadioButton rad = sender as RadioButton;
if (rad != null)
{
Response.Write(rad.Checked);
}
else
{
Response.Write("xx");
}
}
js生成html控件
function AddProperty()
{
var count = document.getElementById('hidCount').value;
var str = "<BR> 属性名称:<input type=/"Text/" id=/"txtProperty"+count+"/" name=/"txtProperty"+count+"/" /> 属性描述:<input type=/"Text/" id=/"txtDesc"+count+"/" name=/"txtDesc"+count+"/" />";
count++;
document.getElementById('hidCount').value=count;
document.getElementById('catePro').innerHTML+=str;
}
因为要为生成的控件要能取其值,所以,必须必须指定其ID,可以先在页面放一个HiddenField控件,并指定默认值为0;当动态添加控件时,可以通过JS脚本改变其值,脚本如上。
<asp:HiddenField ID="hidCount" Value="0" runat="server" />
在页面 后台,可以通过以下方式取其值,如下:
int count = int.Parse(this.hidCount.Value);//取得生成控件的个数,保存在页面的HiddenField中,并可以得知其ID
for (int i = 0; i < count; i++)
{
string propName = string.Empty;
string propDesc = string.Empty;
if (!string.IsNullOrEmpty(Request["txtProperty" + i]))//判断是否存在
{
PIM.Model.CateProperty model = new PIM.Model.CateProperty();
propName = Request["txtProperty" + i].ToString();//,取得生成的控件的值
propDesc = Request["txtDesc" + i].ToString();
//......
}
}
二、动态生成Asp.Net服务器控件,并取其值
private void LoadProperty(int cateId)
{
HtmlGenericControl span = new HtmlGenericControl();
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
StringBuilder strHtml = new StringBuilder();
if (i % 2 == 0)
{
strHtml.Append("<div >");
strHtml.Append("<div class=/"layout1/">");
}
else
{
strHtml.Append("<div >");
}
TextBox txt = new TextBox();
Label lbl = new Label();
HiddenField hdf = new HiddenField();//
lbl.ID = "lblProp" + i.ToString();
lbl.Text = ds.Tables[0].Rows[i]["PropName"].ToString() + ":";
txt.ID = "txtProp" + i.ToString();
hdf.ID = "hdfProp" + i.ToString();//
lbl.EnableViewState = true;
txt.EnableViewState = true;
hdf.EnableViewState = true;//
LiteralControl lc = new LiteralControl(strHtml.ToString());
lc.EnableViewState = true;
span.Controls.Add(lc);
span.Controls.Add(lbl);
span.Controls.Add(txt);
span.Controls.Add(hdf);//
if (i % 2 == 0)
{
span.Controls.Add(new LiteralControl("</div></div>"));
}
else
{
span.Controls.Add(new LiteralControl("</div>"));
}
}
}
动态生成的控件,当点击页面按钮时会刷新页面,所以,生成控件的方法不需要
if(!IsPostBack)
{
}
如果在PageLoad方法中,即使每回都动态加载都无法得到其数据,且动态生成的控件会消失,所以,根据Asp.Net生命周期,我们将生成控件在OnInit()方法中,
即重写此方法
protected override void OnInit(EventArgs e)
{
LoadProperty(cateID);//在OnInit中执行动态添加控件的方法,这样就会保存其状态视图
}
如果这些动态生成的控件,在生成的时候,就需要从数据库中取值,并为其赋值,可以在PageLoad中进行赋值操作,
这时就可以使用(!IsPostBack),且不会丢失其值。
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
if (!string.IsNullOrEmpty(Request["productId"]))
{
string productId = Request["productId"].ToString();
int parentId = int.Parse(ParentID);
LoadData(productId, parentId);//可以用方法对其赋值。。。具体实现省略。
}
}
}
其他:动态添加控件和事件
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
CreatedRadio();
}
private void CreatedRadio()
{
RadioButton rad = new RadioButton();
rad.Text = "Test";
rad.AutoPostBack = true;
rad.CheckedChanged += new EventHandler(rad_CheckedChanged);
phl.Controls.Add(rad);
}
void rad_CheckedChanged(object sender, EventArgs e)
{
RadioButton rad = sender as RadioButton;
if (rad != null)
{
Response.Write(rad.Checked);
}
else
{
Response.Write("xx");
}
}
相关文章推荐
- asp.net动态添加控件并获取值
- asp.net动态添加控件和获取控件的值
- asp.net动态添加控件和获取控件的值
- asp.net动态添加控件和获取控件的值
- Asp.Net动态添加控件,并获取其值
- [ASP.NET AJAX]谨记给UpdatePanel中动态添加的控件赋ID
- asp.net gridview动态添加列,并获取其数据;
- asp.net 动态添加控件
- asp.net动态添加CheckBox控件及判断是否选中,以下是页面及后台代码
- 在ASP.NET页面中动态添加控件
- ASP.NET AJAX 实现登陆无刷新/动态添加服务器控件
- 在C# ASP.NET中,要添加属性到控件中 在HTML页面获取控件中自己定义属性和值
- ASP.NET动态添加用户控件的方法
- ASP.NET页面中动态增加的控件、添加事件
- ASP.NET动态添加控件一例
- asp.net中动态创建控件添加事件
- asp.net动态加载用户控件,关于后台添加、修改的思考
- ASP.NET给Table动态添加删除行,并且得到控件的值
- ASP.NET 后台动态添加控件(复选框)
- asp.net为控件动态添加事件