Я всегда думал, что динамическое генерирование статических страниц нелегко сделать. Вчера я посмотрел это в Интернете, и у меня кружилась голова. Это было на самом деле очень просто. Идея, вероятно, такая.
1: Создайте шаблон HTML -страницы и используйте специальную строку для представления мест, которые вы хотите отображать на этой странице (например, $ htmlstrstr $);
2: В программе используйте эту HTML -страницу, чтобы считать строковую переменную, такую как STR;
3: Используйте метод замены строки, чтобы заменить специальные символы на то, что вы хотите на первом шаге;
4save;
Хорошо, так просто, я написал такой класс в C# Today, чтобы справиться с динамическим генерацией HTML -страниц. Я думал, что все еще пишу это полностью. Я только что вступил в контакт с .net, поэтому я надеюсь дать советы.
ПРИМЕЧАНИЕ. Коды в этой категории не все оригинальные, некоторые коды относятся к кодам пользователей сети!
Ниже приведен код для класса преобразования
Код
1 -й система;
2Using System.Text;
3using System.Web;
4suling System.configuration;
5using System.io;
6namespace Solucky
7 {
8/** ///// <summary>
9 /// Сводное описание Aspxtohtml.
10 /// Примечание. Используя этот класс, вы можете настроить класс шаблонов в файле web.config. Как показано ниже
11/** //*<ppsettings>
12 <Добавить key = "TemplateFilePath" value = "htmlmoudel.htm" />
13 <Добавить key = "htmlfilepath" value = "new/"> </add>
14 <добавить key = "errlogpath" value = "aspxtohtml_log.txt"> </add>
15 </appsettings>*/
16/** /// </summary>
17 Public Class Aspxtohtml
18 {
19/** /// <Сводка>
20 //// Количество параметров, которые будут заменены в файле шаблона
21 /// </summary>
22 private int _templateParamCount = 0;
23/** /// <Сводка>
24 /// Путь, в котором находится файл шаблона
25 /// </summary>
26 частная строка _templatefilepath = configurationsettings.appsettings ["templatefilepath"];
27/** /// <Сводка>
28 /// Путь, хранящийся в преобразованном HTML -файле
29 /// </summary>
30 частная строка _htmlfilepath = configurationsettings.appsettings ["htmlfilepath"];
31
32/** ///// <summary>
33 /// Coding страницы шаблона
34 /// </summary>
35 частное кодирование _templatehtmlcode = encoding.getEncoding ("GB2312");
36
37/** /// <Сводка>
38 /// Конвертированное кодирование файла
39 /// </summary>
40 частного кодирования _code = encoding.getencoding ("GB2312");
41
42/** ///// <summary>
43 /// Конвертированное имя файла HTML
44 /// </summary>
45 частная строка _convertedfilename = "";
46/** ///// <summary>
47 /// Параметры в файле шаблона
48 /// </summary>
49 частная строка [] _templatefileparameter;
50
51/** /// <SUPED>
52 /// Фактическое значение параметра в файле ASPX должно быть заменено на HTML -файл
53 /// </summary>
54 частная строка [] _aspxfileparameter;
55
56 частная строка _errlogpath = configurationsettings.appsettings ["errlogpath"];
57
58 Атрибуты#Атрибуты региона
59
60/** ///// <summary>
61 /// Количество параметров, которые будут заменены в файле шаблона
62 /// </summary>
63 Public Int TemplateParamCount
64 {
65 Get
66 {
67 вернуть это._templateParamCount;
68}
69 SET // При распределении количества параметров фактический массив выделяется для параметров в файле шаблона и фактических значений в файле ASPX, чтобы заменить фактические значения в файле HTML.
70 {
71 if (значение <0)
72 бросить новое ArgementException ();
73
74 if (значение> 0)
75 {
76 this._templateparamcount = value;
77 // параметры в файле шаблона
78 _templatefileparameter = new String [value];
79 // Фактическое значение параметра в файле ASPX должно быть заменено HTML -файлом
80 _aspxfileparameter = new String [value];
81}
82 еще
83 this._templateParamCount = 0;
84}
85}
86
87/** ///// <summary>
88 /// Путь, в котором находится файл шаблона
89 ///
90 /// </summary>
91 Public String TemplateFilePath
92 {
93 get {return this._templatefilepath;}
94 set {this._templatefilepath = value;}
95}
96/** /// <SUPED>
97 /// Путь, хранящийся в преобразованном HTML -файле
98 /// </summary>
99 Public String htmlfilepath
100 {
101 get {return this._htmlfilepath;}
102 set {this._htmlfilepath = value;}
103}
104
105/** /// <SUPED>
106 /// Кодирование файла шаблона HTML
107 /// </summary>
108 Public Coding Templatehtmlcode
109 {
110 get {return this._templatehtmlcode;}
111 set {this._templatehtmlcode = encoding.getEncoding (value.toString ());}
112}
113/** /// <SUPED>
114 /// Кодирование
115 /// </summary>
116 Общественный код кодирования
117 {
118 get {return this._code;}
119 set {this._code = encoding.getEncoding (value.toString ());}
120}
121/** /// <SUPED>
122 /// Путь файла ошибки находится
123 /// </summary>
124 Public String errlogpath
125 {
126 Get {
127 if (! (This._errlogpath == null))
128 вернуть это._errlogpath;
129 еще
130 return "aspxtohtml_log.txt";
131}
132 set {this._errlogpath = value;}
133}
134
135
136 #endregion
137
138 Операция#Работа региона
139
140/** /// <Свод>
141 /// Получить относительный путь файла, в котором находится преобразованный файл HTML
142 /// Например: если htmlfilepath = "/news/"
143 /// Конвертированное имя файла HTML - 2005050505.html
144 /// Затем возвращаемое значение равно /news/200505050505.html
145 /// </summary>
146 /// <Замечания> вернуть NULL, если это свойство называется до того, как метод StartConvert называется </retembks>
147 Public String htmlfilevirtualpath
148 {
149 Get
150 {
151 if (! (This._convertedfilename == ""))
152 вернуть это.htmlfilepath+this._convertedfilename;
153 еще
154 Вернуть NULL;
155}
156}
157
158/** /// <SUPED>
159 /// Значение оплаты за массив параметров HTML -страницы
160 /// </summary>
161 /// <param name = "param"> </param>
162 Public Void SettlementAtePleparameter (String [] Param)
163 {
164 Попробуй
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 /// </summary>
179 /// <param name = "param"> </param>
180 public void setApxFileParameter (String [] param)
181 {
182 Попробуй
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 /// </summary>
197 //// <return> возвращаемое значение - это имя файла после успешного создания </returns>
198 /// <Замечания> Перед тем, как вызовать этот метод, необходимо убедиться, что методы определения обработки временифилепараметра и setAspxFileParameter были вызваны для соответствующих операций по оплате значений </Замечания>
199 public String startConvert ()
200 {
201 if (this._templatefileparameter.length == this._aspxfileparameter.length)
202 {
203 return writefile ();
204}
205 else {
206 возврат нуль;
207}
208}
209/** /// <Сводка>
210 /// начало преобразование aspxtohtml
211 /// </summary>
212 /// <param name = "htmlparam"> массив всех параметров на странице шаблона HTML </param>
213 /// <param name = "aspxparam"> страница ASPX должна заменить массив значений параметра на странице шаблона HTML </param>
214 /// <return> возвращаемое значение - это имя файла после успешного создания </returns>
215 public String startConvert (String [] htmlParam, String [] aspxparam)
216 {
217 // Сначала методы выполнения стоимости платежных операций и SetASPXFileParameter для выполнения стоимости платежных операций
218 SettemplateFileParameter (htmlparam);
219 setAspxFileParameter (ASPXParam);
220 //
221 string fn = this.startConvert ();
222 //
223 _convertedFilename = fn;
224 //
225 return fn;
226}
227
228/** ///// <summary>
229 /// Используйте время для добавления случайных чисел для генерации имени файла
230 /// </summary>
231 /// <return> </returns>
232 частная строка getFilename ()
233 {
234 // Использование времени для добавления случайных чисел для генерации имени файла
235 System.Threading.Thread.sleep (50);
236 string masstr = system.datetime.now.year.tostring ();
237 string methsstr = string.format ("{0: 0#}", system.datetime.now.month);
238 string daystr = string.format ("{0: 0#}", system.datetime.now.day);
239 string tourstr = string.format ("{0: 0#}", system.datetime.now.hour);
240 string minutest = 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 sturstr + месяцы + daystr + tourtr + minutestr + secondstr + millionecondstr + string.format ("{0: 0000#}", rd.next (100)) + ". Html";
245 // return datetime.now.tostring ("yyyymmddhmmss")+". Html";
246}
247/** //// <summary>
248 /// конвертируется
249 /// </summary>
250 /// <return> Возвращает имя файла, названное Time </returns>
251 Private String writefile ()
252 {
253
254 // Файл шаблона чтения
255 string temp = httpcontext.current.server.mappath (this.templatefilepath);
256 StreamReader sr = null;
257 string str = "";
258 Попробуй
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 Наконец
270 {
271 sr.close ();
272}
273 // заменить контент
274 // В настоящее время файл шаблона был прочитан в переменной с именем STR
275 для (int i = 0; i <this.templateParamCount; i ++)
276 {
277 str = str.replace (this._templatefileparameter [i], this._aspxfileparameter [i]);
278}
279
280 return savefile (str);
281}
282
283/** /// <SUPED>
284 ///
285 /// </summary>
286 /// <param name = "str"> </param>
287 /// <return> </returns>
288
289 Private String SaveFile (String Str)
290 {
291 // Напишите файл
292 Streamwriter SW = NULL;
293 Попробуй
294 {
295
296 String path = httpcontext.current.server.mappath (this.htmlfilepath);
297 // HTML -имя файла
298 string htmlfilename = getFilename ();
299 SW = новый 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 Наконец
309 {
310 SW.Close ();
311}
312 возврат "";
313}
314
315/** /// <SUPED>
316 /// Пропустите URL, чтобы вернуть HTML -код на веб -страницу
317 /// </summary>
318 /// <param name = "url"> url </param>
319 /// <return> </returns>
320 Public String geturltohtml (string url)
321 {
322 Попробуй
323 {
324 System.net.WebRequest wreq = System.net.webrequest.create (url);
325 System.net.webresponse wresp = wreq.getResponse ();
326 System.io.Stream Respstream = wresp.getResponseReam ();
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 возврат "";
336}
337 #endregion
338
339
340 Construct #region Construct
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/** ///// <summary>
355 /// Предоставьте количество параметров, которые необходимо заменить
356 /// </summary>
357 /// <param name = "templateParamCount"> </param>
358 public aspxtohtml (int templateparamcount)
359 {
360 SettemplateParamCount (TemplateParamCount);
361
362}
363/** ///// <summary>
364 ///
365 /// </summary>
366 /// <param name = "TemplateParamCount"> Количество параметров на странице шаблона HTML </param>
367 /// <param name = "htmlfilepath"> Путь папки сгенерированного файла HTML </param>
368 /// <param name = "templatefilepath"> HTML -шаблон Pate Pate </param>
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/** /// <SUPED>
381 /// Записать ошибки в метод файла #Region Ошибки записи для файла метод
382 /// </summary>
383 /// <param name = "ee"> </param>
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 = новый 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