ฉันมักจะคิดว่าการสร้างหน้าคงที่แบบไดนามิกไม่ใช่เรื่องง่ายที่จะทำ ฉันดูออนไลน์เมื่อวานนี้และฉันเวียนหัว จริงๆแล้วมันง่ายมาก ความคิดอาจเป็นเช่นนี้
1: สร้างเทมเพลตหน้า HTML และใช้สตริงพิเศษเพื่อแสดงสถานที่ที่คุณต้องการแสดงแบบไดนามิกในหน้านี้ (เช่น $ htmlstrstr $);
2: ในโปรแกรมให้ใช้หน้า HTML นี้เพื่ออ่านตัวแปรสตริงเช่น STR;
3: ใช้วิธีการแทนที่ของสตริงเพื่อแทนที่อักขระพิเศษด้วยสิ่งที่คุณต้องการในขั้นตอนแรก
4Save;
ตกลงง่ายมากฉันเขียนชั้นเรียนแบบนี้ใน C# วันนี้เพื่อจัดการกับการสร้างหน้า HTML แบบไดนามิก ฉันคิดว่าฉันยังคงเขียนมันเต็ม ฉันเพิ่งเข้ามาติดต่อกับ. NET ดังนั้นฉันหวังว่าจะให้คำแนะนำ
หมายเหตุ: รหัสในหมวดหมู่นี้ไม่ได้เป็นต้นฉบับทั้งหมดรหัสบางตัวอ้างถึงรหัสของชาวเน็ต!
ต่อไปนี้เป็นรหัสสำหรับคลาสการแปลง
รหัส
1 การใช้ระบบ;
2 ใช้ System.Text;
3using System.web;
4using System.Configuration;
5Sing System.io;
6namespace Solucky
7 {
8/** //// <summary>
9 /// คำอธิบายสรุปของ AspxToHtml
10 /// หมายเหตุ: การใช้คลาสนี้คุณสามารถกำหนดค่าคลาสเทมเพลตในไฟล์ web.config ดังที่แสดงด้านล่าง
11/** //*<AppSettings>
12 <เพิ่ม key = "templateFilePath" value = "htmlmoudel.htm" />
13 <เพิ่ม key = "htmlFilePath" value = "new/"> </duff>
14 <เพิ่ม key = "errlogPath" value = "ASPXTOHTML_LOG.txt"> </duff>
15 </appsettings>*/
16/** /// </summary>
17 ชั้นเรียนสาธารณะ ASPXTOHTML
18 {
19/** /// <summary>
20 /// จำนวนพารามิเตอร์ที่จะถูกแทนที่ในไฟล์เทมเพลต
21 /// </summary>
22 INT ส่วนตัว _TemplateParamCount = 0;
23/** /// <summary>
24 /// เส้นทางที่ไฟล์เทมเพลตอยู่
25 /// </summary>
26 สตริงส่วนตัว _TemplateFilePath = configurationsettings.AppSettings ["TemplateFilePath"];
27/** /// <summary>
28 /// เส้นทางที่เก็บไว้ในไฟล์ HTML ที่แปลงแล้ว
29 /// </summary>
30 สตริงส่วนตัว _htmlFilePath = configurationsettings.AppSettings ["HTMLFilePath"];
31
32/** //// <summary>
33 /// การเข้ารหัสหน้าแม่แบบ
34 /// </summary>
35 การเข้ารหัสส่วนตัว _templatehtmlCode = encoding.getEncoding ("GB2312");
36
37/** /// <summary>
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/** /// <summary>
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 รับ
66 {
67 ส่งคืนสิ่งนี้ _TemplateParamCount;
68}
69 SET // เมื่อจัดสรรจำนวนพารามิเตอร์อาร์เรย์จริงจะถูกจัดสรรสำหรับพารามิเตอร์ในไฟล์เทมเพลตและค่าจริงในไฟล์ ASPX เพื่อแทนที่ค่าจริงในไฟล์ HTML
70 {
71 ถ้า (ค่า <0)
72 โยนอาร์กิวเมนต์ใหม่ ();
73
74 ถ้า (ค่า> 0)
75 {
76 this._TemplateParamCount = ค่า;
77 // พารามิเตอร์ในไฟล์เทมเพลต
78 _TemplateFileParameter = สตริงใหม่ [ค่า];
79 // ค่าจริงของพารามิเตอร์ในไฟล์ ASPX ควรถูกแทนที่ด้วยไฟล์ HTML
80 _aspxfileparameter = สตริงใหม่ [ค่า];
81}
82 อื่น ๆ
83 this._TemplateParamCount = 0;
84}
85}
86
87/** //// <summary>
88 /// เส้นทางที่ไฟล์เทมเพลตอยู่
89 ///
90 /// </summary>
91 Public String TemplateFilePath
92 {
93 รับ {return this._TemplateFilePath;}
94 Set {this._TemplateFilePath = value;}
95}
96/** /// <summary>
97 /// เส้นทางที่เก็บไว้ในไฟล์ HTML ที่แปลงแล้ว
98 /// </summary>
99 สตริงสาธารณะ htmlfilepath
100 {
101 รับ {return this._htmlfilepath;}
102 Set {this._htmlFilePath = value;}
103}
104
105/** /// <summary>
106 /// html เทมเพลตการเข้ารหัสไฟล์
107 /// </summary>
108 การเข้ารหัสสาธารณะ templatehtmlcode
109 {
110 รับ {return this._templatehtmlcode;}
111 SET {this._TemplateHtMlCode = encoding.getEncoding (value.toString ());}
112}
113/** /// <summary>
114 /// การเข้ารหัส
115 /// </summary>
116 รหัสเข้ารหัสสาธารณะ
117 {
118 รับ {return this._code;}
119 Set {this._code = encoding.getEncoding (value.toString ());}
120}
121/** /// <summary>
122 /// พา ธ ของไฟล์ข้อผิดพลาดอยู่
123 /// </summary>
124 สตริงสาธารณะ errlogpath
125 {
126 รับ {
127 ถ้า (! (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/** /// <summary>
141 /// รับพา ธ ไฟล์สัมพัทธ์ซึ่งไฟล์ HTML ที่แปลงแล้ว
142 /// ตัวอย่าง: ถ้า htmlfilepath = "/news/"
143 /// ชื่อไฟล์ HTML ที่แปลงแล้วคือ 2005050505.html
144 /// จากนั้นค่าที่ส่งคืนคือ /news/200505050505.html
145 /// </summary>
146 /// <ข้อเสนอ> ส่งคืนค่า null หากคุณสมบัตินี้เรียกว่าก่อนที่วิธีการเริ่มต้นจะเรียกว่า </lemarks>
147 สตริงสาธารณะ htmlfilevirtualpath
148 {
149 รับ
150 {
151 ถ้า (! (this._convertedfilename == ""))
152 ส่งคืน this.htmlfilepath+this._convertedfilename;
153 อื่น ๆ
154 Return Null;
155}
156}
157
158/** /// <summary>
159 /// ค่าจ่ายสำหรับอาร์เรย์พารามิเตอร์หน้า HTML
160 /// </summary>
161 /// <param name = "param"> </param>
162 โมฆะสาธารณะ SetTemplateFileParameter (String [] param)
163 {
164 ลอง
165 {
166 ถ้า (param.length == this.templateparamcount)
167 this._TemplateFileParameter = param;
168 // ELSE // ตัวเลขแตกต่างจากคำจำกัดความดั้งเดิม
169 //
170}
171 catch (system.exception ex)
172 {
173 WriteerRfile (อดีต);
174}
175}
176/** /// <summary>
177 /// จ่ายค่าสำหรับอาร์เรย์พารามิเตอร์ในไฟล์ ASPX ที่จะถูกแทนที่ในไฟล์ HTML
178 /// </summary>
179 /// <param name = "param"> </param>
180 โมฆะสาธารณะ setapxfileparameter (String [] param)
181 {
182 ลอง
183 {
184 ถ้า (param.length == this.templateparamcount)
185 this._aspxfileparameter = param;
186 // else // ตัวเลขแตกต่างจากคำจำกัดความดั้งเดิม
187 //
188}
189 Catch (System.Exception EX)
190 {
191 WriteerRfile (อดีต);
192}
193}
194/** /// <summary>
195 /// เริ่มการแปลง AspxToHtml
196 /// </summary>
197 /// <turns> ค่าส่งคืนเป็นชื่อไฟล์หลังจากการสร้างที่สำเร็จ </returns>
198 /// <ข้อเสนอ> ก่อนที่จะเรียกวิธีการนี้จำเป็นต้องตรวจสอบให้แน่ใจว่ามีการเรียกใช้วิธีการ SettEmplateFileParameter และ SetAspxFileParameter สำหรับการดำเนินการจ่ายเงินที่สอดคล้องกัน </emarks>
199 สตริงสาธารณะ startConverver ()
200 {
201 ถ้า (this._TemplateFileParameter.length == this._aspxfileparameter.length)
202 {
203 return writefile ();
204}
205 else {
206 Return Null;
207}
208}
209/** /// <summary>
210 /// เริ่มการแปลง ASPXTOHTML
211 /// </summary>
212 /// <param name = "htmlparam"> อาร์เรย์ของพารามิเตอร์ทั้งหมดในหน้าเทมเพลต HTML </param>
213 /// <param name = "aspxparam"> หน้า ASPX ควรแทนที่อาร์เรย์ค่าพารามิเตอร์ในหน้าเทมเพลต HTML </param>
214 /// <returns> ค่าส่งคืนเป็นชื่อไฟล์หลังจากการสร้างที่สำเร็จ </returns>
215 สตริงสาธารณะ startConvert (สตริง [] htmlparam, สตริง [] aspxparam)
216 {
217 // การโทรครั้งแรกเมธอด SetTemPlateFileParameter และ SetAspxFileparameter เพื่อดำเนินการชำระเงินค่า
218 SetTemplateFileParameter (HTMLPARAM);
219 setaspxfileparameter (aspxparam);
220 //
221 String fn = this.startConvert ();
222 //
223 _convertedFilename = fn;
224 //
225 กลับ FN;
226}
227
228/** //// <summary>
229 /// ใช้เวลาในการเพิ่มหมายเลขสุ่มเพื่อสร้างชื่อไฟล์
230 /// </summary>
231 /// <return> </returns>
232 สตริงส่วนตัว 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 = ใหม่ System.random ();
244 Return YearsTr + MonthSTR + DaySTR + HORYTR + MINUTESTH + SecondStr + Millionsecondstr + String.format ("{0: 0000#}", rd.next (100)) + ". html";
245 // ส่งคืน datetime.now.toString ("yyyymmddhhmmss")+". html";
246}
247/** //// <summary>
248 /// แปลง
249 /// </summary>
250 /// <returns> ส่งคืนชื่อไฟล์ที่ชื่อตามเวลา </returns>
251 Private String WriteFile ()
252 {
253
254 // อ่านไฟล์เทมเพลต
255 สตริงอุณหภูมิ = httpContext.current.server.mappath (this.templateFilePath);
256 StreamReader SR = NULL;
257 String str = "";
258 ลอง
259 {
260 sr = streamReader ใหม่ (temp, this.templatehtmlCode);
261 str = sr.readtoend (); // อ่านไฟล์
262}
263 Catch (Exception Ex)
264 {
265 //httpcontext.current.response.write(xp.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/** /// <summary>
284 ///
285 /// </summary>
286 /// <param name = "str"> </param>
287 /// <return> </returns>
288
289 สตริงส่วนตัว 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 = New StreamWriter (PATH + HTMLFILENAME, FALSE, this.code);
300 SW.WRITE (STR);
301 sw.flush ();
302 ส่งคืน htmlfilename;
303}
304 Catch (Exception Ex)
305 {
306 WriteerRfile (Ex);
307}
308 ในที่สุด
309 {
310 sw.close ();
311}
312 return "";
313}
314
315/** /// <summary>
316 /// ส่งผ่าน URL เพื่อส่งคืนรหัส HTML ไปยังหน้าเว็บ
317 /// </summary>
318 /// <param name = "url"> url </param>
319 /// <return> </returns>
320 Public String getUrltoHtml (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.getResponSestream ();
327 System.io.StreamReader Reader = ใหม่ 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 ASPXTOHTML สาธารณะ ()
343 {
344 //
345 // todo: เพิ่มตรรกะตัวสร้างที่นี่
346 //
347}
348
349 โมฆะส่วนตัว SetTemplateParamCount (int templateParamCount)
350 {
351 ถ้า (TemplateParamCount> 0)
352 this.TemplateParamCount = TemplateParamCount;
353}
354/** //// <summary>
355 /// ระบุจำนวนพารามิเตอร์ที่จะเปลี่ยน
356 /// </summary>
357 /// <param name = "TemplateParamCount"> </param>
358 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"> path หน้าเทมเพลต html </param>
369 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/** /// <summary>
381 /// การเขียนข้อผิดพลาดไปยังวิธีไฟล์ #region ข้อผิดพลาดการเขียนไปยังวิธีไฟล์
382 /// </summary>
383 /// <param name = "ee"> </param>
384 Void Private 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