ASP.NET中Literal使用——动态生成页面

在页面中添加内容时,如果是静态内容,无需使用容器,可以直接将标记作为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

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-09 22:15:34

ASP.NET中Literal使用——动态生成页面的相关文章

动态生成页面(二)

在上篇文章<动态生成页面(一)--ASP.NET中Literal使用>中,介绍了通过Literal容器动态加载页面.但在取值过程中遇到了一些问题.但是因为拼接的控件textbox为服务器控件,所以在取值过程中遇到一些问题. 几经周转,最后无奈改变了实现方法.直接实例化出控件,然后添加到页面中.具体实现过程如下: 前台页面: <body> <form id="form1" runat="server"> <div id=&qu

asp.net中使kindeditor自动生成缩略图

kindedtor编辑器,确实很好用,但是也有很多的不足,比如,我们经常用的图片上传功能,首页如果有图片新闻或者需要显示宿略图的时候,你会发现它并没有提供图片上传自动生成缩略图的功能 ,于是,花了一点时间,对它的上传图片的功能进行了改写,废话少说,直接上代码 图片上传功能调用的是:upload_json.ashx  代码如下 复制代码 using System; using System.Collections; using System.Web; using System.IO; using

动态生成页面(一)——ASP.NET中Literal使用

在页面中加入内容时,假设是静态内容.无需使用容器,能够直接将标记作为HTML直接加入到页面中:可是,假设是动态内容,则必须借助容器将内容加入到页面中.典型的容器有:Label控件.Literal控件.Panel控件和PlaceHolder控件. 一.控件选择:Literal Literal控件与Lable控件的差别在于,Literal控件不向文本中加入不论什么HTML元素:而Label控件呈现一个span元素. Panel和PlaceHolder控件呈现为DIV元素.这将在页面上创建离散块,与L

awstats CGI模式下动态生成页面缓慢的改进

本文可以看做是 http://kaifly.blog.51cto.com/3209616/1719248 这篇文章的下篇,在使用过程中发现awstats在cgi模式下动态生成分析报告慢的问题 (尤其是有些站点每天两个多G的日志,查看起来简直是在考验人的耐性),本文分享一种改造这个缺点的思路. 首先再来总结下awstats的处理过程以及查看分析结果的两种方式,来看官方版说明: Process logs: Building/updating statistics database,建立/更新统计数据

ASP.NET中Literal控件的使用方法(用于向网页中动态添加内容)

原文:https://www.jb51.net/article/82855.htm 可以将 Literal 控件用作网页上其他内容的容器.Literal 控件最常用于向网页中动态添加内容.简单的讲,就是可以把 HTML 代码写到 Literal 控件上,直接呈现出来. 一.常见Literal属性 属性 描述 Text 指定 Literal 控件中显示的文本.在用户的浏览器中,这会显示为 HTML. Mode 指定控件如何处理添入其中的标记. 二.基础用法 前台 LiteralTest.aspx

动态生成页面(从数据库中动态取出数据信息生成页面)

做课程设计的时候  做的有点烦了  所以就简单的写了点 以下就是将添加到购物车的商品动态的显示到前台页面的代码 首先是我的head.jsp这里面的"我的目录"使用的不是直接链接而是一个servlet名称叫做"selectUserCart" 我的里面使用的user.books.userAccout类都是基本的记录了基本信息的类为其实现setXxx()和getXxx()方法 <%@ page language="java" import=&qu

asp.net中Literal与label的区别

摘自:http://www.cnblogs.com/Fskjb/archive/2010/03/19/1690233.html 一.方案 Literal 最常用于向页面中动态添加内容. 二.背景 Literal 控件表示用于向页面添加内容的几个选项之一.对于静态内容,无需使用容器,可以将标记作为 HTML 直接添加到页面中.但是,如果要动态添加内容,则必须将内容添加到容器中.典型的容器有 Label 控件.Literal 控件.Panel 控件和 PlaceHolder 控件. Literal

sitemap.xml 静态和动态生成页面 shopnc二次开发 动态生成sitemap.xml

Sitemap 可方便网站管理员通知搜索引擎他们网站上有哪些可供抓取的网页.最简单的 Sitemap 形式,就是XML 文件,在其中列出网站中的网址以及关于每个网址的其他元数据(上次更新的时间.更改的频率以及相对于网站上其他网址的重要程度为何等),以便搜索引擎可以更加智能地抓取网站. 目前有两种格式 一.Google SiteMap <urlset xmlns=“网页列表地址”> <url> <loc>网址</loc> <lastmod>2005

Winfrom treeview 如何从多个数据表中获取数据动态生成

本文转载:http://www.cnblogs.com/VincentLuo/archive/2008/03/29/1128987.html 在 汪洋怡舟的这篇文章中[http://www.cnblogs.com/longren629/archive/2007/03/14/674633.html]只使用了一个数据表,效果如图2 我想使用多个表来生成动态的treeview,效果如图三,代码如下所示 在第二次与第三次的代码中,代码出现重复,中间只是改了表名.列名 多个表之间,是否也可以实现递归呢,不