一直以為動態生成靜態頁面不好做,昨天在網上找了下,我暈,其實很簡單,思路大概是這樣的,
1:建立一個Html(網頁制作培訓 Html教程 )頁面模板,在這個頁面中把你想要動態顯示的地方用特殊的字符串表示(如$Htmlstrstr$);
2:在程序中用將這個Html頁面讀到一個字符串變量如str;
3:用字符串的resplace方法將在第一步中特殊字符替換成你想要的內容;
4保存;
OK,so easy,今天就用C#(C#培訓 )寫了一個這樣的類,用來處理動態生成Html頁面的,自認為還寫的完整,剛接觸.Net不久,望指教,完整代碼與示例在此下載:下載http://www.cnblogs.com/Files/solucky/ASPxToHtml.rar
轉貼請注明出處,謝謝!
注:此類中的代碼不全是原創,部份代碼參照網友的代碼!
以下是轉換類的代碼
代碼
1using System;
2using System.Text;
3using System.Web;
4using System.Configuration;
5using System.IO;
6namespace solucky
7{
8 /**////
9 /// ASPxToHtml 的摘要說明。
10 /// 注:使用此類,你可以在web.config文件對模板類進行配置.如下
11 /**//*
12
13
14
15 */
16 /**////
17 public class ASPxToHtml
18 {
19 /**////
20 /// 模板文件中要替代的參數個數
21 ///
22 private int _templateParamCount=0;
23 /**////
24 /// 模板文件所在的路徑
25 ///
26 private string _templateFilePath =ConfigurationSettings.APPSettings["templateFilePath"];
27 /**////
28 /// 轉換後的Html文件所存放的路徑
29 ///
30 private string _htmlFilePath =ConfigurationSettings.APPSettings["HtmlFilePath"];
31
32 /**////
33 /// 模板頁頁面編碼
34 ///
35 private Encoding _templateHtmlCode =Encoding.GetEncoding("gb2312");
36
37 /**////
38 /// 轉換後的文件編碼
39 ///
40 private Encoding _code = Encoding.GetEncoding("gb2312");
41
42 /**////
43 /// 轉換後的Html文件名
44 ///
45 private string _convertedFilename="";
46 /**////
47 /// 模板文件中的參數
48 ///
49 private string[] _templateFileparameter ;
50
51 /**////
52 /// ASPx文件中的要代替Html文件中的參數實際值
53 ///
54 private string[] _ASPxFileparameter;
55
56 private string _errlogPath = ConfigurationSettings.APPSettings["ErrLogPath"];
57
58 屬性#region 屬性
59
60 /**////
61 /// 模板文件中要替代的參數個數
62 ///
63 public int TemplateParamCount
64 {
65 get
66 {
67 return this._templateParamCount;
68 }
69 set//分配參數個數時,同時為模板文件中的參數和ASPx文件中的要代替Html(網頁制作培訓 Html教程 )文件中的參數實際值這兩個分配實際數組
70 {
71 if (value < 0)
72 throw new ArgumentException();
73
74 if(value>0)
75 {
76 this._templateParamCount=value;
77 //模板文件中的參數
78 _templateFileparameter = new string[value];
79 //ASPx文件中的要代替Html文件中的參數實際值
80 _ASPxFileparameter = new string[value];
81 }
82 else
83 this._templateParamCount=0;
84 }
85 }
86
87 /**////
88 /// 模板文件所在的路徑
89 ///
90 ///
91 public string TemplateFilePath
92 {
93 get{ return this._templateFilePath;}
94 set{ this._templateFilePath=value;}
95 }
96 /**////
97 /// 轉換後的Html文件所存放的路徑
98 ///
99 public string HtmlFilePath
100 {
101 get{ return this._HtmlFilePath;}
102 set{ this._HtmlFilePath=value;}
103 }
104
105 /**////
106 /// Html模板文件編碼
107 ///
108 public Encoding TemplateHtmlCode
109 {
110 get{ return this._templateHtmlCode;}
111 set{ this._templateHtmlCode=Encoding.GetEncoding(value.ToString());}
112 }
113 /**////
114 /// 編碼
115 ///
116 public Encoding Code
117 {
118 get{ return this._code;}
119 set{ this._code=Encoding.GetEncoding(value.ToString());}
120 }
121 /**////
122 /// 錯誤文件所在路徑
123 ///
124 public string ErrLogPath
125 {
126 get{
127 if(!(this._errlogPath==null))
128 return this._errlogPath;
129 else
130 return "ASPxToHtml_log.txt";
131 }
132 set{this._errlogPath=value;}
133 }
134
135
136 #endregion
137
138 操作#region 操作
139
140 /**////
141 /// 獲取轉換後的Html文件所在相對文件路徑
142 /// 如:如果HtmlFilePath="/news/"
143 /// 轉換後的html文件名為200505050505.Html
144 /// 則返回的值為/news/200505050505.Html
145 ///
146 ///
147 public string Html(網頁制作培訓 Html教程 )FileVirtualPath
148 {
149 get
150 {
151 if(!(this._convertedFilename==""))
152 return this.HtmlFilePath this._convertedFilename;
153 else
154 return null;
155 }
156 }
157
158 /**////
159 /// 為Html頁面參數數組付值
160 ///
161 ///
162 public void setTemplateFileparameter(string[] param)
163 {
164 try
165 {
166 if(param.Length==this.TemplateParamCount)
167 this._templateFileparameter=param;
168 //else//與原定義的個數不等
169 //
170 }
171 catch(System.Exception ex)
172 {
173 WriteErrFile(ex);
174 }
175 }
176 /**////
177 /// 為ASPx文件中將要替換Html文件中的參數數組付值
178 ///
179 ///
180 public void setASPxFileparameter(string[] param)
181 {
182 try
183 {
184 if(param.Length==this.TemplateParamCount)
185 this._ASPxFileparameter=param;
186 //else//與原定義的個數不等
187 //
188 }
189 catch(System.Exception ex)
190 {
191 WriteErrFile(ex);
192 }
193 }
194 /**////
195 /// 開始進行ASPxToHtml轉換
196 ///
197 ///
198 ///
199 public string StartConvert()
200 {
201 if(this._templateFileparameter.Length==this._ASPxFileparameter.Length)
202 {
203 return writeFile();
204 }
205 else{
206 return null;
207 }
208 }
209 /**////
210 /// 開始進行ASPxToHtml轉換
211 ///
212 /// Html模板頁中的所有參數數組
213 /// ASPx頁面中要代替Html模板頁中參數值數組
214 ///
215 public string StartConvert(string[] Htmlparam,string[] ASPxparam)
216 {
217 //先調用setTemplateFileparameter 和setASPxFileparameter方法,進行付值操作
218 setTemplateFileparameter(Htmlparam);
219 setAspxFileparameter(ASPxparam);
220 //
221 string fn=this.StartConvert();
222 //
223 _convertedFilename=fn;
224 //
225 return fn;
226 }
227
228 /**////
229 /// 用時間加隨機數生成一個文件名
230 ///
231 ///
232 private string getfilename()
233 {
234 //用時間加隨機數生成一個文件名
235 System.Threading.Thread.Sleep(50);
236 string yearStr = System.DateTime.Now.Year.ToString();
237 string monthStr = string.Format("{0:0#}",System.DateTime.Now.Month);
238 string dayStr = string.Format("{0:0#}",System.DateTime.Now.Day);
239 string hourStr = string.Format("{0:0#}",System.DateTime.Now.Hour);
240 string minuteStr = string.Format("{0:0#}",System.DateTime.Now.Minute);
241 string secondStr = string.Format("{0:0#}",System.DateTime.Now.Second);
242 string millisecondStr = string.Format("{0:000#}",System.DateTime.Now.Millisecond);
243 System.Random rd = new System.Random();
244 return yearStr monthStr dayStr hourStr minuteStr secondStr millisecondStr string.Format("{0:0000#}",rd.Next(100)) ".Html(網頁制作培訓 Html教程 )";
245 //return DateTime.Now.ToString("yyyyMMddHHmmss") ".Html";
246 }
247 /**////
248 /// 進行轉換處理
249 ///
250 ///
251 private string writeFile()
252 {
253
254 // 讀取模板文件
255 string temp = HttpContext.Current.Server.MapPath(this.TemplateFilePath);
256 StreamReader sr=null;
257 string str="";
258 try
259 {
260 sr = new StreamReader(temp, this.TemplateHtmlCode);
261 str = sr.ReadToEnd(); // 讀取文件
262 }
263 catch(Exception ex)
264 {
265 //HttpContext.Current.Response.Write(exp.Message);
266 //HttpContext.Current.Response.End();
267 WriteErrFile(ex);
268 }
269 finally
270 {
271 sr.Close();
272 }
273 // 替換內容
274 // 這時,模板文件已經讀入到名稱為str的變量中了
275 for(int i=0;i 276 { 277 str =str.Replace(this._templateFileparameter[i],this._ASPxFileparameter[i]); 278 } 279 280 return savefile(str); 281 } 282 283 /**//// 284 /// 285 /// 286 /// 287 /// 288 289 private string savefile(string str) 290 { 291 // 寫文件 292 StreamWriter sw=null; 293 try 294 { 295 296 string path = HttpContext.Current.Server.MapPath(this.Html(網頁制作培訓 Html教程 )FilePath); 297 //Html文件名稱 298 string Htmlfilename=getfilename(); 299 sw = new StreamWriter(path Htmlfilename , false, this.Code); 300 sw.Write(str); 301 sw.Flush(); 302 return Htmlfilename; 303 } 304 catch(Exception ex) 305 { 306 WriteErrFile(ex); 307 } 308 finally 309 { 310 sw.Close(); 311 } 312 return ""; 313 } 314 315 /**//// 316 /// 傳入URL返回網頁的Html代碼 317 /// 318 /// URL 319 /// 320 public string getUrltoHtml(string Url) 321 { 322 try 323 { 324 System.Net.WebRequest wReq = System.Net.WebRequest.Create(Url); 325 System.Net.WebResponse wResp =wReq.GetResponse(); 326 System.IO.Stream respStream = wResp.GetResponseStream(); 327 System.IO.StreamReader reader = new System.IO.StreamReader(respStream, System.Text.Encoding.GetEncoding("gb2312")); 328 return savefile(reader.ReadToEnd()); 329 330 } 331 catch(System.Exception ex) 332 { 333 WriteErrFile(ex); 334 } 335 return ""; 336 } 337 #endregion 338 339 340 構造#region 構造 341 342 public ASPxToHtml() 343 { 344 // 345 // TODO: 在此處添加構造函數邏輯 346 // 347 } 348 349 private void settemplateParamCount(int templateParamCount) 350 { 351 if (templateParamCount>0) 352 this.TemplateParamCount=templateParamCount; 353 } 354 /**//// 355 /// 提供欲代替的參數個數 356 /// 357 /// 358 public ASPxToHtml(int templateParamCount) 359 { 360 settemplateParamCount(templateParamCount); 361 362 } 363 /**//// 364 /// 365 /// 366 /// Html模板頁中的參數個數 367 /// 生成的Html文件所存放的文件夾路徑 368 /// Html(網頁制作培訓 Html教程 )模板頁路徑 369 public ASPxToHtml(int templateParamCount,string HtmlFilePath,string templateFilePath) 370 { 371 settemplateParamCount(templateParamCount); 372 this.HtmlFilePath = HtmlFilePath; 373 this.TemplateFilePath = templateFilePath; 374 375 } 376 #endregion 377 378 #region 379 380 /**//// 381 /// 把錯誤寫入文件方法#region 把錯誤寫入文件方法 382 /// 383 /// 384 private void WriteErrFile(Exception ee) 385 { 386 387 FileStream fs1 = new FileStream(HttpContext.Current.Server.MapPath(ErrLogPath), System.IO.FileMode.Append); 388 StreamWriter sw1 = new StreamWriter(fs1); 389 sw1.WriteLine("**************************************************"); 390 sw1.WriteLine("錯誤日期:" System.DateTime.Now); 391 sw1.WriteLine("錯誤描述:" ee.Message); 392 sw1.WriteLine("錯誤名稱:" ee.Source); 393 sw1.WriteLine("詳細:" ee.ToString()); 394 sw1.WriteLine("*************************************************"); 395 sw1.Close(); 396 } 397 #endregion 398 } 399} 400