一直以为动态生成静态页面不好做,昨天在网上找了下,其实很简单,思路大概是这样的,
1:建立一个html页面模板,在这个页面中把你想要动态显示的地方用特殊的字符串表示(如
$htmlstrstr$);
2:在程序中用将这个html页面读到一个字符串变量如str;
3:用字符串的resplace方法将在第一步中特殊字符替换成你想要的内容;
4保存;
OK,so easy,今天就用C#写了一个这样的类,用来处理动态生成html页面的,自认为还写的完
整,刚接触.NET不久,望指教

注:此类中的代码不全是原创,部份代码参照网友的代码!

以下是转换类的代码

代码

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文件中的参数实际值这两个分配实际数组 
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 /// 如果在未调用StartConvert方法之前调用此属性则返回 
null 
147 public string HtmlFileVirtualPath 
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 /// 在调用此方法之前必需确定已调用setTemplateFileparameter 和 
setAspxFileparameter方法进行相应的付值操作 
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"; 
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;i276 { 
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.HtmlFilePath); 
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模板页路径 
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 }