HTML頁面生成ASPX頁面


   這個功能是在DTcms Demo網站里面扣出來的一個小功能,他的Demo網站里面可以在HTML寫好所有的代碼,然后生成一下ASPX頁面,就可以訪問了。具體的流程下篇文章來分析。這篇文章主要是講HTML如何生成ASPX頁面。

  原理:

  我們先讀取HTML頁面,然后拼接字符串(組成ASPX頁面的結構的字符串),然后創建ASPX頁面把字符串利用File操作寫進ASPX頁面。

例如:

 我們要生成的ASPX頁面的結構大致如下(截圖是最簡單的,沒有涉及數據的交互,只是靜態字符串

 

靜態頁面:

 

生成ASPX頁面代碼如下

      //需要生成ASPX頁面的靜態頁面
                string templetFullPath = HttpContext.Current.Server.MapPath("/Html/Test.html");
                //讀取靜態文件
                using (StreamReader objReader = new StreamReader(templetFullPath, Encoding.UTF8))
                {
                    StringBuilder textOutput = new StringBuilder(70000);
                    textOutput.Append(objReader.ReadToEnd());  //把文件讀取到StringBuilder中

                    string oldStr = textOutput.ToString();
                    string newStr = "";
                    newStr = oldStr;
                    
//重點
//替換特殊標記 newStr = newStr.Replace("\r\n","\\r\\n");
newStr
= newStr.Replace("\"", "\\\"");
            //我們把 </script> 整個寫到 tempplateBulder 里面無法正確顯示,需要拆分開, 寫到兩個Append()里面 newStr
= newStr.Replace("</script>", "</\");\r\n\ttemplateBuilder.Append(\"script>");
StringBuilder sbStr
= new StringBuilder(); //添加頁面頭部 Inherits 這個屬性的值必須對應正確 sbStr.AppendFormat("<%@ Page Language =\"C#\" AutoEventWireup=\"true\" Inherits=\"{0}\" ValidateRequest=\"false\" %>\r\n", "DTcmsTest.Test"); //命名空間 根據頁面需求自己添加 用到一些的命名空間,也可以在對應的*.cs文件里面引用 sbStr.Append("<%@ Import namespace=\"System.Text\" %>\r\n"); //添加可以寫后台代碼的腳本 sbStr.Append("<script runat =\"server\">\r\nprotected override void OnInit(EventArgs e)\r\n"); sbStr.Append("{ \r\n\r base.OnInit(e);\r\n\t");

//基本上就這段代碼是動態的,其他的都是一樣的
//利用StringBuilder輸出頁面 先把HTML全部讀取到StringBuilder里面然后在輸出 sbStr.AppendFormat("StringBuilder templateBuilder = new StringBuilder({0});\r\n\t",textOutput.Capacity); sbStr.AppendFormat("templateBuilder.Append(\"{0}\");\r\n\t", newStr);

sbStr.Append(
"Response.Write(templateBuilder.ToString());\r\n }\r\n"); sbStr.Append("</script>\r\n");
string pageDir = HttpContext.Current.Server.MapPath("/HTML"); string outputPath = pageDir + "\\Test.aspx"; //生成文件的物理路徑 //如果物理路徑不存在則創建 if (!Directory.Exists(pageDir)) { Directory.CreateDirectory(pageDir); }
           //重點
//保存寫入文件 File.WriteAllText(outputPath, sbStr.ToString(), Encoding.UTF8); context.RewritePath("/HTML/Test.aspx");

 

生成ASPX頁面的字符串注意點:

我們是利用File創建一個ASPX頁面,然后進入寫入數據的,它會識別一些特殊的標記。

列如:

  我們寫了一些帶特殊符號的字符串,利用File寫入文件

我們需要在后台代碼中輸出一開始獲取的HTML頁面數據,不能破壞,所以才需要替換

 

 

如果我們需要寫后台代碼,我們新建一個*.cs文件,名字跟ASPX頁面一樣,然后讓類繼承 Page就可以了。

 

 

 這里說的只是原理,沒有涉及到數據交互。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM