当前位置:编程学习 > C#/ASP.NET >>

生成静态HTML! 来个会的啊,多少天了,郁闷,难道这么大的CSDN没人会吗?

asp.net(c#)项目,生成真静态HTML,要求全站都生成,怎么做,谢谢。在线等,一解决,立马结贴。 --------------------编程问答-------------------- --------------------编程问答-------------------- 比如这样就可以把现成的页面变成html
<%@ Page Language="C#" %>
<%@ Import Namespace="System.IO" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
  protected override void Render(HtmlTextWriter writer)
  {
    string content = string.Empty;
    StringWriter stringWriter = new StringWriter();
    HtmlTextWriter htmlWriter = new HtmlTextWriter(stringWriter);
    try
    {
      // 将当前页面的内容呈现到临时的 HtmlTextWriter 对象中
      base.Render(htmlWriter);
      htmlWriter.Close();

      // 得到当前页面的全部内容
      content = stringWriter.ToString();
      File.WriteAllText(Server.MapPath("~/text.html"), content);
      writer.Write(content);
    }
    catch { }
    finally
    {
      stringWriter.Dispose();
      htmlWriter.Close();
      htmlWriter.Dispose();
    }
  }

  protected void Page_Load(object sender, EventArgs e)
  {

    System.Data.DataTable dt = new System.Data.DataTable();
    dt.Columns.Add(new System.Data.DataColumn("Id", typeof(System.Int32)));
    dt.Columns.Add(new System.Data.DataColumn("UserName", typeof(System.String)));
    for (int i = 1; i < 10; i++)
    {
      dt.Rows.Add(i, "测试" + i.ToString() + "_" + DateTime.Now.ToString());
    }
    GridView1.DataSource = dt;
    GridView1.DataBind();
  }
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
  <title>页面呈现内容测试</title>
</head>
<body>
  <form id="form1" runat="server">
  [mxh]
  <asp:GridView ID="GridView1" runat="server">
  </asp:GridView>
  </form>
</body>
</html>

 
--------------------编程问答-------------------- 楼上给力!

生成静态页面有多种方式,有替换变量的,有抓取的,有的语言,比如php,有专门的smarty模板引擎提供了很好的方式。

用baidu搜索一下“生成静态页面”,可以找到好多资料 --------------------编程问答-------------------- 用模版引擎...  百度下 --------------------编程问答-------------------- 你真的想多了,整站静态化,其实就那么一个小方法就可以实现,楼上的类似例子,主要还是逻辑 --------------------编程问答--------------------

#region 生成HTML通用工具
    /// <summary>
    /// 生成HTML通用工具
    /// </summary>
    public static void makehtml(string template, string target)
    {
        TextWriter tw = new StringWriter();
        HttpContext.Current.Server.Execute(template, tw);
        string filepath = HttpContext.Current.Server.MapPath(target);
        FileInfo file = new FileInfo(filepath);
        using (FileStream fs = file.Create())
        {
            StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.UTF8);
            sw.WriteLine(tw.ToString());
            sw.Flush();
            sw.Close();
        }
    }
    #endregion
--------------------编程问答-------------------- SP老大 论坛上很多

TextWriter tw = new StringWriter();
        HttpContext.Current.Server.Execute(template, tw) --------------------编程问答--------------------
引用 6 楼  的回复:
C# code

#region 生成HTML通用工具
    /// <summary>
    /// 生成HTML通用工具
    /// </summary>
    public static void makehtml(string template, string target)
    {
        TextWriter tw = new StringWriter();
……


这里的template 和 target,这两个参数都是什么呀,我直接调用这个函数,给它传这两个参数,应该就可以的吧 --------------------编程问答-------------------- template 就是模板文件
target就是你生成的html文件名

上一个帖子就告诉你了StreamWriter生成文件

template 要你自己去写,把每一个页面都做成模板,

--------------------编程问答-------------------- 不要把这个想的太难


1.生成真静态   写一个html  做模板  写入一些自己知道相应替换的标签
例如  文本里 ||body||

2.读取版本 替换相应的数据  然后保存成新的文件  即可  (其他雷同 大致只这样 )
||boyd||  替换成  得到的 body

(高级点的应用)
自定义标签 然后自己根据相应的需要 正则匹配和替换 。   --------------------编程问答-------------------- template 要你自己去写,把每一个页面都做成模板,
---------------
我的网站有几十个页面,我都要一个页面写一个对应的模版? 这样需要多少功夫,有没简单点的办法
--------------------编程问答--------------------
引用 11 楼  的回复:
template 要你自己去写,把每一个页面都做成模板,
---------------
我的网站有几十个页面,我都要一个页面写一个对应的模版? 这样需要多少功夫,有没简单点的办法

几十个 很多吗? --------------------编程问答-------------------- 0.00的结帖率  我还是不给你发链接了 --------------------编程问答--------------------
引用 11 楼  的回复:
template 要你自己去写,把每一个页面都做成模板,
---------------
我的网站有几十个页面,我都要一个页面写一个对应的模版? 这样需要多少功夫,有没简单点的办法


没有必要考虑那种所谓的“字符串替换”的低级做法。asp.net本身就是一个高级的html生成器,它有非常多、非常专业的生成html方式。而
<% = GetHtml1234() %>
这种是最初级的做法,也比所谓的自己写一个“字符串替换”不知道功能强多少倍,更何况更多的功能(数据绑定控件、ascx、母版页、等等等等)。

所谓“生成html文件”仅仅是为了把aspx输出的html读取下来并且保存为新的文件,在编程上你完全用不着考虑那种所谓的“替换字符串”的说法,就是使用aspx来编程、然后使用通用的几行代码一次性地读取大批aspx输出的html就行了! --------------------编程问答-------------------- 除了Server.Execute(path,htmlWriter)可以读取输出的html,可以在页面的Render重载中输出,我们也可以随便写一出句   new WebClient().DownloadString(path) 来输出。

这些都是直接读取aspx输出的html。

记住,不需要替换字符串。既然是asp.net程序来编程,就不要些什么“替换字符串”那种设计。不然对不起你“asp.net程序员”这个自诩的称号。 --------------------编程问答-------------------- 你可以得到每个页面html代码,然后写到一个静态文件里去,每个页面都这么读写就可以了 --------------------编程问答-------------------- 静态整个网站?你那干嘛不直接做静态网站...适合静态的网页只占少数 --------------------编程问答-------------------- 可以用模板生成,也可以按SP老大的方法生成。
个人喜好。这个不难。

但你页面上的逻辑,链接怎么组织起来,这个要想想。

不过现在确实不需要全站静态了。局部就够了。
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,