• 动态生成页面(一)——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=" 110px; height: 27px;">");
                    sbField.Append(model[i].SFieldNamecn );  //text名称
                    if (evenFlag)
                    {
                        sbField.Append("</td><td class="right" style=" 200px; height: 27px;"><asp:AdvTextBox ID="");
                    }
                    else
                    {
                        sbField.Append("</td><td colspan="3" class="right" style=" 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=" 110px; height: 27px;">");
                    sbField.Append(model[i].SFieldNamecn);  //text名称
                    //推断是单列还是多列:evenFlag=true 是多列
                    if (evenFlag)
                    {
                        sbField.Append("</td><td class="right" style=" 200px; height: 27px;"><asp:CheckBox ID="");
                    }
                    else
                    {
                        sbField.Append("</td><td colspan="3" class="right" style=" 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


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

  • 相关阅读:
    vm 克隆一台新机器启动网卡报错:device eth0 does not seem to be present, delaying initialization
    DHCP server 冒充及DOS攻击处理方案
    linux、centos下查看系统版本、bios版本,内存信息等
    ubuntu 下当前网速查看
    ubuntu的文本界面修改字体大小
    mysql增加远程连接用户及查看数据库表结构
    数据库问题-复杂流量问题的排查
    python处理空格脚本
    winform水平滚动条联动panel
    winform自定义日期控件,要求可以手动输入日期DatePicker
  • 原文地址:https://www.cnblogs.com/yangykaifa/p/6892565.html
Copyright © 2020-2023  润新知