在页面中添加内容时,如果是静态内容,无需使用容器,可以直接将标记作为HTML直接添加到页面中;但是,如果是动态内容,则必须借助容器将内容添加到页面中。典型的容器有:Label控件、Literal控件、Panel控件和PlaceHolder控件。
Literal控件与Lable控件的区别在于,Literal控件不向文本中添加任何HTML元素;而Label控件呈现一个span元素。
Panel和PlaceHolder控件呈现为DIV元素,这将在页面上创建离散块,与Lable和Literal控件进行内嵌呈现的方式不同。
因为小编编码过程中需要直接将文本和控件直接呈现在页面中而不是用任何附加标记,所以果断选择了Literal控件。
将“工具箱”的Literal控件拖拽到要添加动态内容的位置,运行时直接将代码赋给控件的Text属性。
页面代码为:
<html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>动态生成</title> </head> <body> <form id="form1" runat="server"> <div> <asp:Literal ID="ToTable" runat="server"></asp:Literal> </div> </form> </body> </html>
将列表中“S_Edit_Visible”字段中值为1的字段动态显示在页面上
#region ToTable-拼接table表-2015年7月26日 /// <summary> /// 拼接table表 /// </summary> /// <param name="model"></param> public void ToTable(IList<ModelBFieldDef> model) { int num,i; bool evenFlag; StringBuilder sbTable = new StringBuilder("<table>"); //判断控件的奇偶数 if (model.Count % 2 == 0) { evenFlag = true; } else { evenFlag = false; } if (evenFlag) { num = model.Count / 2; } else { num = (model.Count - 1) / 2; } //直接加载偶数个 for (i = 0; i < num; i++) { int t = 2 * i; sbTable.Append("<tr>"); sbTable.Append(soleCombin(model, t, true)); sbTable.Append(soleCombin(model, t + 1, true)); sbTable.Append("<tr>"); } if (!evenFlag) { sbTable.Append("<tr>"); sbTable.Append(soleCombin(model, model.Count-1, evenFlag)); sbTable.Append("<tr>"); } sbTable.Append("</table>"); this.HideTable.Text=sbTable.ToString(); } #endregion #region soleCombin-单个组合控件-2015年7月26日 /// <summary> /// 单个组合控件 /// </summary> /// <param name="model">字段实体列表</param> /// <param name="i">列表的第几行</param> /// <param name="evenFlag">要加载控件是否两个一行:true,两个一行;false,单个一行</param> /// <returns></returns> public string soleCombin(IList<ModelBFieldDef> model,int i,bool evenFlag) { StringBuilder sbField = new StringBuilder(""); string Field; string Type = model[i].SFieldUitype; switch (Type) { case "String": //文本框类型 sbField.Append( "<td class=\"left\" style=\"width: 110px; height: 27px;\">"); sbField.Append(model[i].SFieldNamecn ); //text名称 if (evenFlag) { sbField.Append("</td><td class=\"right\" style=\"width: 200px; height: 27px;\"><asp:AdvTextBox ID=\""); } else { sbField.Append("</td><td colspan=\"3\" class=\"right\" style=\"width: 510px; height: 27px;\"><asp:AdvTextBox ID=\""); } sbField.Append(model[i].SFieldName); //TextBox的Id sbField.Append("\" runat=\"server\" CssClass=\"nTxt\" AttrName=\""); sbField.Append(model[i].SFieldNamecn); //AttrName sbField.Append("\" InputType=\""); //如果验证类型为空,则默认为string类型 if (model[i].SFieldType == null) { sbField.Append("string"); } else { sbField.Append(model[i].SFieldType); } sbField.Append("\""); //验证是否可为空 if (model[i].SFieldCannull =="1" || model[i].SFieldCannull ==null ) { sbField.Append("NotNull=\"true\""); } sbField.Append("MaxLength=\""); //输入字符串最大长度 if (model[i].SFieldLen == null) { sbField.Append("60"); } else { sbField.Append(model[i].SFieldLen); } sbField.Append("\" Width=\"165px\" Height=\"19px\"></asp:AdvTextBox>"); //验证是否可为空 if (model[i].SFieldCannull == "1" || model[i].SFieldCannull == null) { sbField.Append("<a style=\"color: Red; text-decoration: none;\">*</a>"); } sbField.Append("</td>"); break; case "CheckBox": //复选框类型 sbField.Append( "<td class=\"left\" style=\"width: 110px; height: 27px;\">"); sbField.Append(model[i].SFieldNamecn); //text名称 //判断是单列还是多列:evenFlag=true 是多列 if (evenFlag) { sbField.Append("</td><td class=\"right\" style=\"width: 200px; height: 27px;\"><asp:CheckBox ID=\""); } else { sbField.Append("</td><td colspan=\"3\" class=\"right\" style=\"width: 510px; height: 27px;\"><asp:CheckBox ID=\""); } sbField.Append(model[i].SFieldName); //TextBox的Id sbField.Append("\" runat=\"server\" />"); break; case "Radio": //单选框类型(待补) break; case "Seclect": //下拉框类型(待补) break; case "Date": //日期类型(待补) break; default: break; } Field = sbField.ToString(); return Field; } #endregion
小结:选择何种容器来对动态页面进行加载,要结合实际情况,根据每个容器的特点来选择。
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/u010924897/article/details/47067493