动态生成页面(一)——ASP.NET中Literal使用
2015-07-26 14:05
639 查看
在页面中添加内容时,如果是静态内容,无需使用容器,可以直接将标记作为HTML直接添加到页面中;但是,如果是动态内容,则必须借助容器将内容添加到页面中。典型的容器有:Label控件、Literal控件、Panel控件和PlaceHolder控件。
Panel和PlaceHolder控件呈现为DIV元素,这将在页面上创建离散块,与Lable和Literal控件进行内嵌呈现的方式不同。
因为小编编码过程中需要直接将文本和控件直接呈现在页面中而不是用任何附加标记,所以果断选择了Literal控件。
页面代码为:
小结:选择何种容器来对动态页面进行加载,要结合实际情况,根据每个容器的特点来选择。
一、控件选择:Literal
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>
三、根据数据库表内容创建动态页面
1、业务逻辑:
将列表中“S_Edit_Visible”字段中值为1的字段动态显示在页面上2、具体代码:
#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
小结:选择何种容器来对动态页面进行加载,要结合实际情况,根据每个容器的特点来选择。
相关文章推荐
- Maticsoft.Framework for Asp.Net框架应用实例(一)
- Asp.NET MVC3 使用 SignalR 实现推
- Metasploit测试暴雷漏洞 (编号CVE-2012-1889)
- 《ASP.NET》数据绑定—DataList实践篇
- 利用Metasploit测试一个古老的IE8漏洞(编号CVE-2012-1875)
- ASP、JSP、PHP 三种技术比较
- ASP、JSP、PHP 三种技术比较
- asp.net 弹出框信息
- asp.net重写服务器控件
- 《ASP.NET》数据绑定—DataList
- AspJson应用
- ASP.NETWeb Pages (Razor) 问题解决向导
- asp.net mvc Model验证总结及常用正则表达式
- 【回味无穷】ASP.NET验证控件
- 在ASP.NET MVC中,使用Bundle来打包压缩js和css
- asp.net页面viewstate
- ASP.NET中Session的sessionState 4种mode模式
- ASP.NET 5 Beta5 对TagHelper带来的变化
- 树莓派初体验之虚机Qemu+Raspbian
- ASP.NET MVC中如何实现页面跳转