如何使用asp.net在服务器上生成一个新的html页面?
问题描述:
我想这样做,通过按主页上的按钮,用户将能够在网站的服务器上创建一个新的HTML页面(例如www.example.com/0002.html)我需要此页面永远在那里,每个人都可以访问。如何使用asp.net编程创建一个html页面?如何使用asp.net在服务器上生成一个新的html页面?
答
只需创建一个新文件并将其保存在某个可通过.html文件扩展名公开访问的位置。下面是another SO question一个简短的脚本:
using (StreamWriter w = new StreamWriter(Server.MapPath("~/page.html"), true))
{
w.WriteLine("<html><body>Hello dere!</body></html>"); // Write the text
}
答
要在服务器上创建一个文件,你的服务器端代码需要使用一个FileStream写入磁盘,就像你会写入磁盘在正常的桌面应用。你需要做的一件事就是把它写在持有你的网站的目录中。
一些代码写入文件:
using (StreamWriter sw = new StreamWriter(Server.MapPath("fileName.html")))
using (HtmlTextWriter writer = new HtmlTextWriter(sw))
{
writer.RenderBeginTag(HtmlTextWriterTag.Html);
writer.RenderBeginTag(HtmlTextWriterTag.Head);
writer.Write("Head Contents");
writer.RenderEndTag();
writer.RenderBeginTag(HtmlTextWriterTag.Body);
writer.Write("Body Contents");
writer.RenderEndTag();
writer.RenderEndTag();
}
答
protected void Button1_Click(object sender, EventArgs e)
{
string body = "<html><body>Web page</body></html>";
//number of current file
int filenumber = 1;
string numberFilePath = "/number.txt";
//change number if some html was already saved and number.txt was created
if (File.Exists(Server.MapPath(numberFilePath)))
{
//open file with saved number
using (StreamReader sr = new StreamReader(numberFilePath))
{
filenumber = int.Parse(sr.ReadLine()) + 1;
}
}
using (StreamWriter sw = new StreamWriter(Server.MapPath(filenumber.ToString("D4") + ".html")))
{
sw.Write(body);
//write last saved html number to file
using (StreamWriter numberWriter = new StreamWriter(Server.MapPath(numberFilePath), false))
{
numberWriter.Write(filenumber);
}
}
}
这是我能想到的simpliest方式。我没有测试它,但它应该工作。无论如何,最好使用数据库来处理这类事情。我没有添加任何try-catch代码来保持代码简单...
答
在最基本的情况下,您可以使用流编写器在其中创建一个带有HTML标记的新文本文件。
var filePath = ""; // What ever you want your path to be
var contentOfPage = "<html>Whatever you are writing</html>";
using (StreamWriter writer = new StreamWriter(Server.MapPath(filePath))
{
writer.WriteLine(contentOfPage);
}
重要的是你如何决定文件名是什么?如果你没有为此添加机制,那么你每次都会覆盖同一个文件!
现在你可以使用内置的.Net方法,它非常难看,但它工作,我想。
fileName = System.IO.Path.GetRandomFileName();
// You may want to put an html on the end in your case
fileName = System.IO.Path.GetRandomFileName() + ".html";
在这里,我很可能实现一个定制的方式,如果我做到了,搜索引擎优化的目的,但如果这并不重要
答
根据您的意见,你需要的是这样的代码在按钮单击事件代码:
//get all HTML files in current directory that has numeric name:
string strRootPath = Server.MapPath(".");
List<string> arrExistingFiles = Directory.GetFiles(strRootPath, "*.html").ToList().FindAll(fName =>
{
int dummy;
return Int32.TryParse(Path.GetFileNameWithoutExtension(fName), out dummy);
});
//calculate next number based on the maximum file name, plus 1:
int nextFileNumber = arrExistingFiles.ConvertAll(fName => Int32.Parse(Path.GetFileNameWithoutExtension(fName))).Max() + 1;
//generate file name with leading zeros and .html extension:
string strNewFileName = nextFileNumber.ToString().PadLeft(5, '0') + ".html";
string strNewFilePath = Server.MapPath(strNewFileName);
//write contents:
File.WriteAllText(strNewFilePath, body);
//let user option to see the file:
litCreateFileResult.Text = string.Format("File created successfully. <a href=\"{0}\" target=\"_blank\">View</a>", strNewFileName);
的代码是相当多的评论,唯一值得加入的是最后一行,这个工作添加到您的.aspx
形式:
<asp:Literal ID="litCreateFileResult" runat="server" />
嗨,谢谢你的回答。我想先创建0001.html,然后再创建0002.html等。跟踪创建的最新页码以始终创建独特页面的最佳方式是什么?我可以在哪里存储价值? – JoeWinrow 2011-03-30 11:18:58