生成静态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搜索一下“生成静态页面”,可以找到好多资料 --------------------编程问答-------------------- 用模版引擎... 百度下 --------------------编程问答-------------------- 你真的想多了,整站静态化,其实就那么一个小方法就可以实现,楼上的类似例子,主要还是逻辑 --------------------编程问答--------------------
--------------------编程问答-------------------- SP老大 论坛上很多
#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
TextWriter tw = new StringWriter();
HttpContext.Current.Server.Execute(template, tw) --------------------编程问答--------------------
这里的template 和 target,这两个参数都是什么呀,我直接调用这个函数,给它传这两个参数,应该就可以的吧 --------------------编程问答-------------------- template 就是模板文件
target就是你生成的html文件名
上一个帖子就告诉你了StreamWriter生成文件
template 要你自己去写,把每一个页面都做成模板,
--------------------编程问答-------------------- 不要把这个想的太难
1.生成真静态 写一个html 做模板 写入一些自己知道相应替换的标签
例如 文本里 ||body||
2.读取版本 替换相应的数据 然后保存成新的文件 即可 (其他雷同 大致只这样 )
||boyd|| 替换成 得到的 body
(高级点的应用)
自定义标签 然后自己根据相应的需要 正则匹配和替换 。 --------------------编程问答-------------------- template 要你自己去写,把每一个页面都做成模板,
---------------
我的网站有几十个页面,我都要一个页面写一个对应的模版? 这样需要多少功夫,有没简单点的办法
--------------------编程问答--------------------
几十个 很多吗? --------------------编程问答-------------------- 0.00的结帖率 我还是不给你发链接了 --------------------编程问答--------------------
没有必要考虑那种所谓的“字符串替换”的低级做法。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