【问题标题】:How to generate a new html page on the server using asp.net?如何使用asp.net在服务器上生成一个新的html页面?
【发布时间】:2011-07-26 00:09:49
【问题描述】:

我想让它通过按下主页上的按钮,用户将能够在网站的服务器上创建一个新的 html 页面(例如 www.example.com/0002.html)我需要这个页面永远在那里,每个人都可以访问。如何使用 asp.net 以编程方式创建 html 页面?

【问题讨论】:

    标签: asp.net html


    【解决方案1】:

    根据你的cmets,你需要的是按钮点击事件代码中的这样的代码:

    //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" />
    

    【讨论】:

      【解决方案2】:
      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);
              }
          }
      }
      

      这是我能想到的最简单的方法。我没有测试它,但它应该可以工作。无论如何,最好将数据库用于此类事情。而且我没有添加任何 try-catch 代码来保持代码简单...

      【讨论】:

      • 您应该将 StreamWriter 包装在 Using 语句中,以确保正确处理它。
      • 您好,谢谢您的回答。我希望第一次创建 0001.html,然后创建下一步按钮以创建 0002.html,依此类推。跟踪创建的最新页码以始终创建唯一页面的最佳方法是什么?我可以将值存储在哪里?
      • 您可以将值存储在数据库或文件中。我将在我的代码中添加文件示例。
      • 根本不需要任何 Stream,File 类提供了静态方法来在一行中创建和写入文本文件。无需存储最后一个值,您可以迭代现有文件以找到“最大值”。
      【解决方案3】:

      在最基本的情况下,您可以使用流编写器创建一个新的文本文件,其中包含 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";
      

      如果我做到了,出于 SEO 的目的,我可能会采用定制的方式,但如果这不重要的话

      【讨论】:

        【解决方案4】:

        要在服务器上创建文件,您的服务器端代码需要使用 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();
            }
        

        【讨论】:

        • 谢谢!这是我第一次在这里提问。你们太棒了。
        • 您好,谢谢您的回答。我希望第一次创建 0001.html,然后创建下一步按钮以创建 0002.html,依此类推。跟踪创建的最新页码以始终创建唯一页面的最佳方法是什么?我可以将值存储在哪里?
        【解决方案5】:

        只需创建一个新文件并将其保存在可通过 .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
        }
        

        【讨论】:

        • 您好,谢谢您的回答。我希望第一次创建 0001.html,然后创建下一步按钮以创建 0002.html,依此类推。跟踪创建的最新页码以始终创建唯一页面的最佳方法是什么?我可以将值存储在哪里?
        猜你喜欢
        • 2015-12-09
        • 1970-01-01
        • 2018-08-03
        • 1970-01-01
        • 2012-05-19
        • 2016-05-05
        • 2016-07-29
        • 2021-10-09
        • 1970-01-01
        相关资源
        最近更新 更多