HOME
BBS
深山帮帮欢迎您,您可以注册或者
qq登录只需一步,快速开始

根据页面模板动态生成html页面

来自:博客网 作者:admin 时间:2008-1-7 21:31:06
当前标签:asp.nethtml

一直以为动态生成静态页面不好做,昨天在网上找了下,其实很简单,思路大概是这样的,
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

Ads loading...
共有0条关于《根据页面模板动态生成html页面》的评论
发表评论
正在加载评论……
Ads loading...
返回顶部发表评论
呢 称:
表 情:
内 容:
评论内容:不能超过 400 字,需审核,请自觉遵守互联网相关政策法规。
验证码: 验证码 
网友评论声明,请自觉遵守互联网相关政策法规。

您发布的评论即表示同意遵守以下条款:
一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家、社会、集体和公民的合法权益;
二、不得发布国家法律、法规明令禁止的内容;互相尊重,对自己在本站的言论和行为负责;
三、本站对您所发布内容拥有处置权。

同类文章
ASP.NET中Cookie编程的基础知识
ASP.NET 2.0跨网页提交的三法
ASP.NET 2和IIS 7.0发生不兼容变化
ASP.NET中文乱码问题的解决。
ASP.Net 2.0中的5个数据控件
根据页面模板动态生成html页面
ASP.NET AJAX的应用
Asp.net中防止用户多次登录的方法
Ads loading...
相关文章
ASP.NET中Cookie编程的基础知识
ASP.NET 2.0跨网页提交的三法
ASP.NET 2和IIS 7.0发生不兼容变化
浅谈 Vista系统设置IIS7攻略
ASP.NET中文乱码问题的解决。
ASP.Net 2.0中的5个数据控件
ASP.NET AJAX的应用
Asp.net中防止用户多次登录的方法
Ads loading...
最新文章
asp中Request.ServerVariables能获取的信息整理总结
利用CSS实现半透明效果兼容IE与火狐与chrome等浏览器
sql语句中怎么按照in语句里的id原有的顺序进行排序输出
通过设置iis的进程池让网站的并发数,性能提升几个档次
asp通过多次获得来取得用户的真实IP
通过XMLHTTP检查网站能否打开
asp利用sina提供的ip库端口来获得当前IP所有的地区,所在国,所在省,所在市,在线解析json
利用aspJpeg组件生成多图片水印组合时给加上透明水印图片