在页面中加入内容时,假设是静态内容。无需使用容器,能够直接将标记作为HTML直接加入到页面中;可是,假设是动态内容,则必须借助容器将内容加入到页面中。典型的容器有:Label控件、Literal控件、Panel控件和PlaceHolder控件。

一、控件选择: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

小结:选择何种容器来对动态页面进行载入,要结合实际情况。依据每一个容器的特点来选择。

最新文章

  1. MVVM大比拼之AngularJS源码精析
  2. centos 怎么安装 g++
  3. Python基础篇【第3篇】: Python正则表达式
  4. kvm 简介
  5. Linux 磁盘分区、格式化、目录挂载
  6. [转] Spring MVC sample application for downloading files
  7. 调用百度地图API的应用混淆后出问题
  8. 移动端下拉刷新,iScroll.js用法(转载)
  9. Java中的get()和set()方法
  10. ecshop商品分类页获取相册列表方法
  11. LINUX服务器配置NFS服务,挂载外部存储实现目录共享
  12. PowerBuilder预防数据库死锁相关处理
  13. FZU 2086 餐厅点餐
  14. Python 一行代码
  15. iOS 视频开发学习
  16. 实现pc端信纸留言板
  17. iview 动态渲染menu时active-name无效的问题
  18. mysql 备份报错mysqldump: [Warning] Using a password on the command line interface can be insecure.
  19. Hash和HashCode深入理解
  20. 【洛谷4238】 多项式求逆(NTT,分治)

热门文章

  1. 【原】简单shell练习(二)
  2. Java 调用存储过程 返回结果集
  3. Python学习-初始列表
  4. 零基础入门学习Python(28)--文件
  5. 编译Nginx, 并使用自签证书实现https访问
  6. 搭建分布式yarn
  7. 一个页面从输入URL到加载显示完成,发生了什么?
  8. Spring核心技术(六)——Spring中Bean的生命周期
  9. 【04】emmet系列之编辑器
  10. idea 修改Git密码和账号方法