利用ASP.Net动态生成HTML文件!
环境:Microsoft.NETFrameworkSDKv2.0.50727
OS:WindowsServer2003SP1中文版
ASP.Net生成静态HTML页
在.Net中涉及此类操作的是System.IO
实现动态创建HTML文件的功能需要应用StreamReader和StreamWriter类。
在ASP.net中,String对象是不可改变的,每次使用该类中的方法时,都要在内存中创建一个新的字符串对象,这就需要为新对象分配新的空间。在需要对字符串执行重复修改的情况下,就会增加系统开销。如果要修改字符串而不创建新的对象,则可以使用Sysmte.text命名空间下的StringBuilder类,该类可以改变字符串,当在一个循环中将许多字符串连接到一起时,使用StringBuildr类可以提高性能。
实现方法:首先使用StreamReader对象读取指定HTML模板文件内容,并把读取到的内容保存到StringBuilder对象中,然后通过for循环语句依次替换关键字段,最后再通过StreamWriter对象根据替换后新内容创建一个HTML文件。
代码如下:
页面文件:
新闻模板文件(template.html):
<html>
<head>
<title>$htmlkey[0]</title>
<metahttp-equiv="Content-Type"content="text/html;charset=gb2312">
</head>
<body>
<table$htmlkey[1]height="100%"border="0"width="100%"cellpadding="10"cellspacing="0" bgcolor="#eeeeee"style="border:1pxsolid#000000">
<tr>
<tdwidth="100%"valign="middle"align="left">
<spanstyle="color:$htmlkey[2];font-size:$htmlkey[3]"><marquee>$htmlkey[4]</marquee></span>
</td>
</tr>
</table>
</body>
</html>
页面文件:Dhtml.aspx
<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="Dhtml.aspx.cs"Inherits="Dhtml"%>
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml">
<headrunat="server">
<title>UntitledPage</title>
</head>
<body>
<formid="Form1"method="post"runat="server">
<asp:Buttonid="btnCreate"style="Z-INDEX:101;LEFT:576px;POSITION:absolute;TOP:48px"
runat="server"Text="创建HTML文件"OnClick="btnCreate_Click"></asp:Button>
<asp:TextBoxid="txtContent"style="Z-INDEX:102;LEFT:208px;POSITION:absolute;TOP:80px"
runat="server"TextMode="MultiLine"Height="402px"Width="352px"></asp:TextBox>
<asp:HyperLinkid="hyCreateFile"style="Z-INDEX:103;LEFT:584px;POSITION:absolute;TOP:96px"
runat="server"Target="_blank">创建的HTML文件</asp:HyperLink>
<asp:TextBoxid="txtTitle"style="Z-INDEX:104;LEFT:208px;POSITION:absolute;TOP:48px"runat="server"
Width="352px"></asp:TextBox>
<asp:Labelid="Label1"style="Z-INDEX:105;LEFT:128px;POSITION:absolute;TOP:48px"runat="server">页面标题</asp:Label>
<asp:Labelid="Label2"style="Z-INDEX:106;LEFT:128px;POSITION:absolute;TOP:80px"runat="server">页面内容</asp:Label>
</form>
</body>
</html>
实现代码:Dhtml.aspx.cs
usingSystem;
usingSystem.Data;
usingSystem.Configuration;
usingSystem.Collections;
usingSystem.Web;
usingSystem.Web.Security;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
usingSystem.Web.UI.WebControls.WebParts;
usingSystem.Web.UI.HtmlControls;
usingSystem.Text;
usingSystem.IO;
publicpartialclassDhtml:System.Web.UI.Page
{
protectedvoidPage_Load(objectsender,EventArgse)
{
}
protectedvoidbtnCreate_Click(objectsender,EventArgse)
{
string[]newContent=newstring[5];//定义和html标记数目一致的数组
StringBuilderstrhtml=newStringBuilder();
try
{
//创建StreamReader对象
using(StreamReadersr=newStreamReader(Server.MapPath("TextBox")+"\\template.html"))
{
stringoneline;
//读取指定的HTML文件模板
while((oneline=sr.ReadLine())!=null)
{
strhtml.Append(oneline);
}
sr.Close();
}
}
catch(Exceptionerr)
{
//输出异常信息
Response.Write(err.ToString());
}
//为标记数组赋值
newContent[0]=txtTitle.Text;//标题
newContent[1]="BackColor='#cccfff'";//背景色
newContent[2]="#ff0000";//字体颜色
newContent[3]="100px";//字体大小
newContent[4]=txtContent.Text;//主要内容
//根据上面新的内容生成html文件
try
{
//指定要生成的HTML文件
stringfname=Server.MapPath("TextBox")+"\\"+DateTime.Now.ToString("yyyymmddhhmmss")+".html";
//替换html模版文件里的标记为新的内容
for(inti=0;i<5;i++)
{
strhtml.Replace("$htmlkey["+i+"]",newContent[i]);
}
//创建文件信息对象
FileInfofinfo=newFileInfo(fname);
//以打开或者写入的形式创建文件流
using(FileStreamfs=finfo.OpenWrite())
{
//根据上面创建的文件流创建写数据流
StreamWritersw=newStreamWriter(fs,System.Text.Encoding.GetEncoding("GB2312"));
//把新的内容写到创建的HTML页面中
sw.WriteLine(strhtml);
sw.Flush();
sw.Close();
}
//设置超级链接的属性
hyCreateFile.Text=DateTime.Now.ToString("yyyymmddhhmmss")+".html";
hyCreateFile.NavigateUrl="TextBox/"+DateTime.Now.ToString("yyyymmddhhmmss")+".html";
}
catch(Exceptionerr)
{
Response.Write(err.ToString());
}
}
}
vs2005.net+winserver2003sp1下调试通过