利用ASP.NET动态生成HTML文件
1
利用ASP.Net动态生成HTML文件!2
环境:Microsoft.NETFrameworkSDKv2.0.507273
OS:WindowsServer2003SP1中文版4
ASP.Net生成静态HTML页5
在.Net中涉及此类操作的是System.IO6

7
实现动态创建HTML文件的功能需要应用StreamReader和StreamWriter类。8

9
在ASP.net中,String对象是不可改变的,每次使用该类中的方法时,都要在内存中创建一个新的字符串对象,这就需要为新对象分配新的空间。在需要对字符串执行重复修改的情况下,就会增加系统开销。如果要修改字符串而不创建新的对象,则可以使用Sysmte.text命名空间下的StringBuilder类,该类可以改变字符串,当在一个循环中将许多字符串连接到一起时,使用StringBuildr类可以提高性能。10

11
实现方法:首先使用StreamReader对象读取指定HTML模板文件内容,并把读取到的内容保存到StringBuilder对象中,然后通过for循环语句依次替换关键字段,最后再通过StreamWriter对象根据替换后新内容创建一个HTML文件。12

13
代码如下:14

15
页面文件:16

17
新闻模板文件(template.html):18

19
<html>20
<head>21
<title>$htmlkey[0]</title>22
<metahttp-equiv="Content-Type"content="text/html;charset=gb2312">23
</head>24
<body>25
<table$htmlkey[1]height="100%"border="0"width="100%"cellpadding="10"cellspacing="0" bgcolor="#eeeeee"style="border:1pxsolid#000000">26
<tr>27
<tdwidth="100%"valign="middle"align="left">28
<spanstyle="color:$htmlkey[2];font-size:$htmlkey[3]"><marquee>$htmlkey[4]</marquee></span>29
</td>30
</tr>31
</table>32
</body>33
</html>34

35

36
页面文件:Dhtml.aspx37

38
<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="Dhtml.aspx.cs"Inherits="Dhtml"%>39

40
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">41

42
<htmlxmlns="http://www.w3.org/1999/xhtml">43
<headrunat="server">44
<title>UntitledPage</title>45
</head>46
<body>47
<formid="Form1"method="post"runat="server">48
<asp:Buttonid="btnCreate"style="Z-INDEX:101;LEFT:576px;POSITION:absolute;TOP:48px"49
runat="server"Text="创建HTML文件"OnClick="btnCreate_Click"></asp:Button>50
<asp:TextBoxid="txtContent"style="Z-INDEX:102;LEFT:208px;POSITION:absolute;TOP:80px"51
runat="server"TextMode="MultiLine"Height="402px"Width="352px"></asp:TextBox>52
<asp:HyperLinkid="hyCreateFile"style="Z-INDEX:103;LEFT:584px;POSITION:absolute;TOP:96px"53
runat="server"Target="_blank">创建的HTML文件</asp:HyperLink>54
<asp:TextBoxid="txtTitle"style="Z-INDEX:104;LEFT:208px;POSITION:absolute;TOP:48px"runat="server"55
Width="352px"></asp:TextBox>56
<asp:Labelid="Label1"style="Z-INDEX:105;LEFT:128px;POSITION:absolute;TOP:48px"runat="server">页面标题</asp:Label>57
<asp:Labelid="Label2"style="Z-INDEX:106;LEFT:128px;POSITION:absolute;TOP:80px"runat="server">页面内容</asp:Label>58
</form>59
</body>60
</html>61

62

63
实现代码:Dhtml.aspx.cs64

65
usingSystem;66
usingSystem.Data;67
usingSystem.Configuration;68
usingSystem.Collections;69
usingSystem.Web;70
usingSystem.Web.Security;71
usingSystem.Web.UI;72
usingSystem.Web.UI.WebControls;73
usingSystem.Web.UI.WebControls.WebParts;74
usingSystem.Web.UI.HtmlControls;75
usingSystem.Text;76
usingSystem.IO;77

78
publicpartialclassDhtml:System.Web.UI.Page79


{80
protectedvoidPage_Load(objectsender,EventArgse)81

{82

83
}84
protectedvoidbtnCreate_Click(objectsender,EventArgse)85

{86
string[]newContent=newstring[5];//定义和html标记数目一致的数组87
StringBuilderstrhtml=newStringBuilder();88
try89

{90
//创建StreamReader对象91
using(StreamReadersr=newStreamReader(Server.MapPath("TextBox")+"\\template.html"))92

{93
stringoneline;94
//读取指定的HTML文件模板95
while((oneline=sr.ReadLine())!=null)96

{97
strhtml.Append(oneline);98
}99
sr.Close();100
}101
}102
catch(Exceptionerr)103

{104
//输出异常信息105
Response.Write(err.ToString());106
}107
//为标记数组赋值108
newContent[0]=txtTitle.Text;//标题109
newContent[1]="BackColor='#cccfff'";//背景色110
newContent[2]="#ff0000";//字体颜色111
newContent[3]="100px";//字体大小112
newContent[4]=txtContent.Text;//主要内容113

114
//根据上面新的内容生成html文件115
try116

{117
//指定要生成的HTML文件118
stringfname=Server.MapPath("TextBox")+"\\"+DateTime.Now.ToString("yyyymmddhhmmss")+".html";119
//替换html模版文件里的标记为新的内容120
for(inti=0;i<5;i++)121

{122
strhtml.Replace("$htmlkey["+i+"]",newContent[i]);123
}124
//创建文件信息对象125
FileInfofinfo=newFileInfo(fname);126
//以打开或者写入的形式创建文件流127
using(FileStreamfs=finfo.OpenWrite())128

{129
//根据上面创建的文件流创建写数据流130
StreamWritersw=newStreamWriter(fs,System.Text.Encoding.GetEncoding("GB2312"));131
//把新的内容写到创建的HTML页面中132
sw.WriteLine(strhtml);133
sw.Flush();134
sw.Close();135
}136
//设置超级链接的属性137
hyCreateFile.Text=DateTime.Now.ToString("yyyymmddhhmmss")+".html";138
hyCreateFile.NavigateUrl="TextBox/"+DateTime.Now.ToString("yyyymmddhhmmss")+".html";139
}140
catch(Exceptionerr)141

{142
Response.Write(err.ToString());143
}144
}145
}146

147
vs2005.net+winserver2003sp1下调试通过148

这里和大家分享和学习如何学IT!

浙公网安备 33010602011771号