动态生成页面(二)
来源:互联网 发布:c语言大小写转换程序 编辑:程序博客网 时间:2024/06/08 08:50
在上篇文章《动态生成页面(一)——ASP.NET中Literal使用》中,介绍了通过Literal容器动态加载页面。但在取值过程中遇到了一些问题。但是因为拼接的控件textbox为服务器控件,所以在取值过程中遇到一些问题。
几经周转,最后无奈改变了实现方法。直接实例化出控件,然后添加到页面中。具体实现过程如下:
前台页面:
<body> <form id="form1" runat="server"> <div id="test"> </div> </form></body>
后台拼接:
#region SingleControl-单个组合控件-2015年7月27日-杨晓敏 /// <summary> /// 单个组合控件 /// </summary> /// <param name="model"></param> /// <param name="i"></param> public void SingleControl(IList<ModelBFieldDef> model, int i) { string Type = model[i].SFieldUitype; Label lblName = new Label(); lblName.Width = 200; lblName.Style.Add("TEXT-ALIGN", "right"); lblName.Text = model[i].SFieldNamecn; bool statusFlag; if (status == "edit") { statusFlag = true; } else { statusFlag = false; } int strRowId = Convert.ToInt32(strFieldPara); string strFieldId = model[i].SFieldId; IList<ModelBDataDef> ValueModel; BDataDefModel.NRowId = strRowId; BDataDefModel.SFieldId = strFieldId; ValueModel = _BLLBDataDef.GetList(BDataDefModel); string strValue = ValueModel[0].SValue; switch (Type) { case "String": //文本框类型 TextBox txtContent = new TextBox(); txtContent.ID = model[i].SFieldId; txtContent.MaxLength = Convert.ToInt32(model[i].SFieldLen); tableContainer.Controls.Add(new LiteralControl("<br>")); tableContainer.Controls.Add(lblName); tableContainer.Controls.Add(new LiteralControl(" ")); tableContainer.Controls.Add(txtContent); tableContainer.Controls.Add(new LiteralControl("<br>")); if (statusFlag) { //string strID = "ctl00$ContentPlaceHolder1$" + model[i].SFieldId; //TextBox strTxt = (TextBox)this.FindControl(strID) as TextBox;// test为获取控件的ID txtContent.Text = strValue; } break; case "CheckBox": //复选框类型 CheckBox cbxContent = new CheckBox(); cbxContent.ID = model[i].SFieldId; tableContainer.Controls.Add(new LiteralControl("<br>")); tableContainer.Controls.Add(lblName); tableContainer.Controls.Add(new LiteralControl(" ")); tableContainer.Controls.Add(cbxContent); tableContainer.Controls.Add(new LiteralControl("<br>")); if (statusFlag) { string strID = "ctl00$ContentPlaceHolder1$" + model[i].SFieldId; CheckBox strTxt = (CheckBox)this.FindControl(strID) as CheckBox;// test为获取控件的ID if (strValue == "on") { strTxt.Checked = true; } else { strTxt.Checked = false; } } break; case "Select": //下拉框类型 DropDownList ddl = new DropDownList(); ddl.ID = model[i].SFieldId; if (model[i].SDictType == "1") { string str = model[i].SDictId; //以;; , ,分割字符 char[] strSplit = { ';', ';', ',', ',' }; string[] datas = str.Split(strSplit); ddl.Items.Add(""); for (int n = 0; n < datas.Length; n++) { ddl.Items.Add(datas[n]); } } tableContainer.Controls.Add(new LiteralControl("<br>")); tableContainer.Controls.Add(lblName); tableContainer.Controls.Add(new LiteralControl(" ")); tableContainer.Controls.Add(ddl); tableContainer.Controls.Add(new LiteralControl("<br>")); ddl.SelectedValue = strValue; if (statusFlag) { //string strID = "ctl00$ContentPlaceHolder1$" + model[i].SFieldId; //TextBox strTxt = (TextBox)this.FindControl(strID) as TextBox;// test为获取控件的ID //strTxt.Text = strValue; ddl.SelectedValue = strValue; } break; default: break; } } #endregion
获取拼接控件的值
获取控件的值,可以通过FindControl来取值或赋值。如,要取TextBox1的值,则可以:
protected void Button1_Click(object sender, EventArgs e){ //Control c = this.FindControl("TextBox1"); //TextBox tb= (TextBox)c; //FindControl返回的是一个Control类型的控件,需要强制类型转化成TextBox类型 TextBox tb=(TextBox)this.FindControl("TextBox1") as TextBox; this.Label1.Text = tb.Text; }
需要注意的是,如果TextBox被放在其他容器里,其ID值可能发生改变,如放在Datagrid中,从HTML页面中查看其ID为:
<input name="dg1$ctl02$TextBox1" type="text" id="dg1_ctl02_TextBox1" />
在获取TextBox控件时,我们就需要改变FindControl中Id的值。在实现过程中因为忽略了这一点,一直取不到值,在调试上浪费了很多时间。
1 0
- 动态生成页面(二)
- Asp.net动态生成html页面(二)
- PHP生成动态页面
- 动态页面生成 HTML
- JSP动态生成页面
- 页面动态生成时间
- java生成静态页面(二)
- 【动态页面】(二)Java反射
- 动态生成页面(从数据库中动态取出数据信息生成页面)
- PHP生成动态页面--转
- 如何动态生成静态页面
- ASP_NET动态生成html页面
- 动态生成带格式页面
- 报表数据动态生成页面
- ASP动态生成静态页面
- 页面模板动态生成html
- C#动态生成静态页面
- 动态生成Html页面内容
- LeetCode 14: Longest Common Prefix
- Java基础-----集合
- Oracle之DataGurd(DG)环境搭建
- 客户端网页编程--第五章
- ios8新特性widget开发
- 动态生成页面(二)
- DB---环境搭建
- jQuery学习之动画效果
- HDU 2141 Can you find it?【二分】
- ListView+radioButton实现每行单选
- Hadoop生态上几个技术的关系与区别:hive、pig、hbase 关系与区别
- 上下文无关文法2
- LeetCode 240: Search a 2D Matrix II
- 常用类之Date类