اعتقدت دائمًا أن توليد صفحات ثابتة بشكل ديناميكي ليس من السهل القيام به. نظرت إلى الإنترنت أمس وكنت بالدوار. كان الأمر بسيطًا جدًا. ربما تكون الفكرة هكذا.
1: قم بإنشاء قالب صفحة HTML ، واستخدم سلسلة خاصة لتمثيل الأماكن التي تريد عرضها ديناميكيًا في هذه الصفحة (مثل $ HTMLSTRST $) ؛
2: في البرنامج ، استخدم صفحة HTML هذه لقراءة متغير سلسلة مثل STR ؛
3: استخدم طريقة استبدال السلسلة لاستبدال الأحرف الخاصة بما تريده في الخطوة الأولى ؛
4save
حسنًا ، من السهل جدًا ، كتبت فصلًا كهذا في C# اليوم للتعامل مع صفحات HTML التي تولد ديناميكيًا. اعتقدت أنني ما زلت أكتبها بالكامل. لقد توصلت للتو إلى .NET ، لذلك آمل أن أقدم النصيحة.
ملاحظة: الرموز في هذه الفئة ليست كلها أصلية ، بعض الرموز تشير إلى رموز مستخدمي الإنترنت!
فيما يلي رمز فئة التحويل
شفرة
1 استخدام نظام ؛
2 using system.text ؛
3 using system.web ؛
4 using system.configuration ؛
5 using system.io ؛
6namespace solucky
7 {
8/** //// <summary>
9 /// وصف ملخص لـ AspxtOhtml.
10 /// ملاحظة: باستخدام هذه الفئة ، يمكنك تكوين فئة القالب في ملف web.config. كما هو موضح أدناه
11/** //*<AppSettings>
12 <add key = "templatefilepath" value = "htmlmoudel.htm" />
13 <add key = "htmlfilepath" value = "new/"> </edd>
14 <add key = "errlogpath" value = "aspxtohtml_log.txt"> </edd>
15 </appsettings>*/
16/** /// </summary>
17 الطبقة العامة aspxtohtml
18 {
19/** /// <summary>
20 /// عدد المعلمات المراد استبدالها في ملف القالب
21 /// </summary>
22 private 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 = charsoding.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 int public int templateparamcount
64 {
65 الحصول على
66 {
67 إرجاع this._templateparamcount ؛
68}
69 SET // عند تخصيص عدد المعلمات ، يتم تخصيص الصفيف الفعلي للمعلمات في ملف القالب والقيم الفعلية في ملف ASPX لاستبدال القيم الفعلية في ملف HTML.
70 {
71 إذا (القيمة <0)
72 رمي new PresumentException () ؛
73
74 إذا (القيمة> 0)
75 {
76 this._templateParamCount = value ؛
77 // المعلمات في ملف القالب
78 _templateFileParameter = سلسلة جديدة [value] ؛
79 // يجب استبدال القيمة الفعلية للمعلمة في ملف ASPX بملف HTML
80 _aspxfileparameter = سلسلة جديدة [value] ؛
81}
82 آخر
83 this._templateParamCount = 0 ؛
84}
85}
86
87/** //// <summary>
88 /// المسار الذي يوجد فيه ملف القالب
89 ///
90 /// </summary>
91 سلسلة عامة 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 Template File Comparing
107 /// </summary>
108 ترميز عام templatehtmlcode
109 {
110 احصل على {return this._templatehtmlcode ؛}
111 SET {this._templatehtmlcode = charding.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 if (! (this._errlogpath == null))
128 إرجاع this._errlogpath ؛
129 آخر
130 إرجاع "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 /// <mromarks> return null إذا تم استدعاء هذه الخاصية قبل أن تسمى طريقة StartConvert </remarks>
147 سلسلة عامة htmlfilevirtualpath
148 {
149 الحصول على
150 {
151 if (! (this._convertedfilename == "")
152 إرجاع this.htmlfilepath+this._convertedfilename ؛
153 آخر
154 عودة لاغية ؛
155}
156}
157
158/** /// <summary>
159 /// قيمة الدفع لصفيف معلمة صفحة HTML
160 /// </summary>
161 /// <param name = "param"> </param>
162 public void settemplatefileparameter (سلسلة [] بارام)
163 {
164 حاول
165 {
166 if (param.length == this.templateParamCount)
167 this._templateFileParameter = param ؛
168 // else // الرقم مختلف عن التعريف الأصلي
169 //
170}
171 Catch (System.Exception Ex)
172 {
173 WriteRrfile (ex) ؛
174}
175}
176/** /// <summary>
177 /// ادفع قيمة صفيف المعلمة في ملف ASPX الذي سيتم استبداله في ملف HTML
178 /// </summary>
179 /// <param name = "param"> </param>
180 public void setapxfileparameter (سلسلة [] بارام)
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/** /// <summary>
195 /// ابدأ تحويل ASPXTOHTML
196 /// </summary>
197 /// <Returns> قيمة الإرجاع هي اسم الملف بعد الإنشاء الناجح </returns>
198 /// <ملاحظات> قبل استدعاء هذه الطريقة ، من الضروري التأكد من أن أساليب SetTerMateFileParameter و SetAspxFileParameter قد تم استدعاؤها لعمليات دفع القيمة المقابلة </ملاحظات>
199 StartConvert startConvert ()
200 {
201 if (this._templatefileparameter.length == this._aspxfileparameter.length)
202 {
203 return writefile () ؛
204}
205 آخر {
206 عودة لاغية ؛
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 (String [] HTMLPARAM ، String [] ASPXPARAM)
216 {
217 // اتصل أولاً على أساليب SETTEMPLITEFILEPARAMETER و SETASPXFILEPARAMETER لأداء عمليات دفع القيمة
218 SETTEMPLITEFILEPARAMETER (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 /// <Returns> </rovenss>
232 سلسلة خاصة getFilename ()
233 {
234 // استخدم الوقت لإضافة أرقام عشوائية لإنشاء اسم ملف
235 System.Threading.Thread.Sleep (50) ؛
236 String yeartr = system.datetime.now.year.toString () ؛
237 String Monthrtr = 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 minutester = 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 yearstr + شهرين + DayStr + Hourtr + minutestr + secondstr + millionsecondstr + string.format ("{0: 0000#}" ، rd.next (100)) + ". html" ؛
245 // return dateTime.now.toString ("Yyyymmddhhmmss")+". html" ؛
246}
247/** //// <summary>
248 /// تحويل
249 /// </summary>
250 /// <returns> إرجاع اسم الملف المسمى Time </Returns>
251 سلسلة خاصة الكتابة ()
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 (استثناء EX)
264 {
265 //httpcontext.current.response.write(exp.message) ؛
266 //httpcontext.current.response.end () ؛
267 WriteRrfile (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 /// <Returns> </rovense>
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 (استثناء EX)
305 {
306 WriteErrfile (ex) ؛
307}
308 أخيرًا
309 {
310 sw.close () ؛
311}
312 عودة "" ؛
313}
314
315/** /// <summary>
316 /// تمرير في عنوان URL لإرجاع رمز HTML إلى صفحة الويب
317 /// </summary>
318 /// <param name = "url"> url </param>
319 /// <Returns> </rovenss>
320 سلسلة عامة 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 repsstream = 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 WriteRrfile (ex) ؛
334}
335 العودة "" ؛
336}
337 #endregion
338
339
340 بناء #Region
341
342 ASPXTOHTML العامة ()
343 {
344 //
345 // TODO: أضف منطق مُنشئ هنا
346 //
347}
348
349 private void 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 SETTEMPLITEPARAMCOUNT (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 template page path </param>
369 ASPXTOHTML العامة (int templateparamcount ، سلسلة htmlfilepath ، سلسلة templatefilepath)
370 {
371 SETTEMPLITEPARAMCOUNT (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 private void writeerrfile (استثناء EE)
385 {
386
387 FileStream FS1 = 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 ("Error Description:" + EE.Message) ؛
392 SW1.Writeline ("اسم الخطأ:" + ee.source) ؛
393 SW1.Writeline ("التفاصيل:" + ee.toString ()) ؛
394 SW1.Writeline ("****************************************************************************
395 SW1.Close () ؛
396}
397 #endregion
398}
399}
400