您的位置:首页 > 编程语言 > ASP

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

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


小结:选择何种容器来对动态页面进行加载,要结合实际情况,根据每个容器的特点来选择。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: