1. 程式人生 > >動態生成頁面(一)——ASP.NET中Literal使用

動態生成頁面(一)——ASP.NET中Literal使用

case colspan label 奇偶數 容器 業務邏輯 con stringbu font

在頁面中加入內容時,假設是靜態內容。無需使用容器,能夠直接將標記作為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


小結:選擇何種容器來對動態頁面進行載入,要結合實際情況。依據每一個容器的特點來選擇。

動態生成頁面(一)——ASP.NET中Literal使用