.net动态页面转成静态页面(急用~~) 我公司现在需要把所有页面由动态转成静态的,请那位大大给我个工具!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 伪静态 : URLRewriter 要真静态:可以定义模版,将每条数据生成一个HTML页面 对于静态页面生成技术做几点说明: (1)如果是网站的访问量比较小没有太大必要生成静态页,静态页主要是为了减轻服务器压力的,访问量小的网站自然不会对服务器造成压力,生成静态页面反而会增加磁盘空间消耗。 (2)生成的静态文件名要有规律可循,例如在这个例子里生成的静态文件有如下格式:ShowUser+用户编号+.html,这样对于任意一个编号的用户很容易就知道其对应的静态文件名,例如编号为4的用户对应的详情静态页面文件名为ShowUser4.html。另外生成静态页面之后,要注意替换掉直接指向动态页的链接,例如在CreateHtml.aspx中所有指向用户详情的页面都是指向了静态文件,同样如果还存在链接,例如在有些网站中还有“上一个”、“下一个”这样的链接,也需要将这些链接替换成指向静态页面的链接。 (3)生成的静态文件的编码问题。如果采用模版替换法生成静态页面,则静态页面保存的编码要与模版页中所使用的页面编码一致;如果使用了直接输出法生成静态页面,那么生成的静态页面的编码要尽量与动态页面所使用的编码一致。 在实际中为了维护方便,会将静态页面都存放在特定文件夹下,这样就可能会出现图片无法显示或者链接不正确的情况,为了解决这种情况可以用两种方法解决:(1)所有的链接都以相对网站根路径的方法表示,如对于图片采用<img src=”/images/book.jpg”/>这种方式。(2)采用设置其<base href="..."/>的方式表示基于基路径的表示形式。有关路径的表示方式可以查阅《ASP.NET夜话》第二章。 哎等了这么久都没人有吗? 我要下班了,有的人请把它发到我邮箱里面:[email protected]记得加你在csdn的名字,我好结贴 用url rewriter实现伪静态或用模板实现静态页 第一种方法:使用模板转换,步骤如下:1、建立MyConvert.cs类文件 using System; //记得添加以下三引用 using System.Text; using System.Web; using System.IO; namespace TesConvert { /// <summary> /// MyConvert 的摘要说明。 /// </summary> public class MyConvert { public MyConvert() { // // TODO: 在此处添加构造函数逻辑 // } public bool WriteFile(string strText,string strContent,string strAuthor) { string path = HttpContext.Current.Server.MapPath("/TesConvert/news/");//定义html文件存放路径 Encoding code = Encoding.GetEncoding("gb2312");//定义文字编码 // 读取模板文件 string temp = HttpContext.Current.Server.MapPath("/TesConvert/text.html"); StreamReader sr=null; StreamWriter sw=null; string str=""; try { sr = new StreamReader(temp, code); str = sr.ReadToEnd(); // 读取文件 } catch(Exception exp) { HttpContext.Current.Response.Write(exp.Message); HttpContext.Current.Response.End(); sr.Close(); } string htmlfilename=path + DateTime.Now.ToString("yyyyMMddHHmmss")+".html"; // 替换内容 // 这时,模板文件已经读入到名称为str的变量中了 str = str.Replace("ShowArticle",strText); //模板页中的ShowArticle str = str.Replace("title",strText); str = str.Replace("content",strContent); str = str.Replace("author",strAuthor); // 写文件 try { sw = new StreamWriter(htmlfilename,false,code); sw.Write(str); sw.Flush(); } catch(Exception ex) { HttpContext.Current.Response.Write(ex.Message); HttpContext.Current.Response.End(); } finally { sw.Close(); } return true; } } } 2、TestNews.aspx文件: 添加三和TextBox分别为:tbx_Title、tbx_Content、tbx_Author和一个Button:btn_AddNews。 TestNews.aspx.cs文件 private void btn_AddNews_Click(object sender, System.EventArgs e) { MyConvert Hover = new MyConvert(); if(Hover.WriteFile(this.txb_Title.Text.ToString(),Server.HtmlDecode(this.txb_Content.Value),this.txb_Author.Text.ToString())) { Response.Write("添加成功"); } else { Response.Write("生成HTML出错!"); } } 3、添加模板text.html文件 <head>ShowArticle</head><body>title<br/>content<br/>author</body>说明:一.news文件夹必须赋予asp.net用户写入的权限。这是一个简单的实现例子,实际项目必须先将数据保存到数据库下面,在datagird中调用数据库下面html文件的URL地址。二.默认情况下,我们是不能向TextBox、TextArea中添加html语法的,必须修改config文件,在<system.web>下面添加<pages validateRequest="false" />,但是这样做的话,整个项目中都允许键入html标签了,暂时还不知道其他的方。 缺点:这种方法是在ASP.net在页面所有内容生成后、输出内容前对页面内容进行操作以前曾说过用HttpModule来在Response前更改,不够灵活,每行修改response,比较费力。第二种方法:重写AttributeCollection.Render,比较灵活(msdn如是说:“在呈现阶段,所有 ASP.NET 移动设备适配器都通过一个称为文本编写器的对象来编写它们的输出。文本编写器对象是从 TextWriter 基类创建的。”)可以写个基类,如:public class BasePage: System.Web.UI.Page{ public BasePage() { } protected override void Render(System.Web.UI.HtmlTextWriter writer) { string name=Request.Url.AbsolutePath.Substring(1,Request.Url.AbsolutePath.Length-1).Replace("aspx","htm"); string newurl=""; if(name.IndexOf("/")>0) { newurl=Server.MapPath("../") + name; } else { newurl=Server.MapPath("./") + name; } MemoryStream ms = new MemoryStream(); StreamWriter sww = new StreamWriter(ms); StreamWriter swr = new StreamWriter(newurl); System.Web.UI.HtmlTextWriter htmlw = new HtmlTextWriter(swr); base.Render(htmlw); htmlw.Flush(); htmlw.Close(); string strLL = System.Text.Encoding.UTF8.GetString(ms.ToArray()); Response.Write(strLL); Response.Redirect(Request.Url.AbsoluteUri.Replace("aspx","htm"), true); }}然后在需要生成静态页面的页面中继承就可以了。 高手请进,请教一个数据排队列的问题 【求助】ListView如何调样式??? 强制设为主页 Adobe Reader 无法打开 ASP.net PDF 打印 我想让弹出来的窗口以小窗口显示,怎么做啊? Std_StranJF.js繁简体转换问题 请问vs2005如何应用XML [100分求助]提交评论出错:PageRequestManagerParserErrorException DropDownList 探讨一下网站开发过程中的最大难点会是什么? 省市区三级联动-asp.net自定义控件 RssToolkit.dll的用法
要真静态:可以定义模版,将每条数据生成一个HTML页面
(1)如果是网站的访问量比较小没有太大必要生成静态页,静态页主要是为了减轻服务器压力的,访问量小的网站自然不会对服务器造成压力,生成静态页面反而会增加磁盘空间消耗。
(2)生成的静态文件名要有规律可循,例如在这个例子里生成的静态文件有如下格式:ShowUser+用户编号+.html,这样对于任意一个编号的用户很容易就知道其对应的静态文件名,例如编号为4的用户对应的详情静态页面文件名为ShowUser4.html。另外生成静态页面之后,要注意替换掉直接指向动态页的链接,例如在CreateHtml.aspx中所有指向用户详情的页面都是指向了静态文件,同样如果还存在链接,例如在有些网站中还有“上一个”、“下一个”这样的链接,也需要将这些链接替换成指向静态页面的链接。
(3)生成的静态文件的编码问题。如果采用模版替换法生成静态页面,则静态页面保存的编码要与模版页中所使用的页面编码一致;如果使用了直接输出法生成静态页面,那么生成的静态页面的编码要尽量与动态页面所使用的编码一致。
在实际中为了维护方便,会将静态页面都存放在特定文件夹下,这样就可能会出现图片无法显示或者链接不正确的情况,为了解决这种情况可以用两种方法解决:(1)所有的链接都以相对网站根路径的方法表示,如对于图片采用<img src=”/images/book.jpg”/>这种方式。(2)采用设置其<base href="..."/>的方式表示基于基路径的表示形式。有关路径的表示方式可以查阅《ASP.NET夜话》第二章。
我要下班了,有的人请把它发到我邮箱里面:[email protected]
记得加你在csdn的名字,我好结贴
或用模板实现静态页
使用模板转换,步骤如下:
1、建立MyConvert.cs类文件
using System;
//记得添加以下三引用
using System.Text;
using System.Web;
using System.IO;
namespace TesConvert
{
/// <summary>
/// MyConvert 的摘要说明。
/// </summary>
public class MyConvert
{
public MyConvert()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
public bool WriteFile(string strText,string strContent,string strAuthor)
{
string path = HttpContext.Current.Server.MapPath("/TesConvert/news/");//定义html文件存放路径
Encoding code = Encoding.GetEncoding("gb2312");//定义文字编码
// 读取模板文件
string temp = HttpContext.Current.Server.MapPath("/TesConvert/text.html");
StreamReader sr=null;
StreamWriter sw=null;
string str="";
try
{
sr = new StreamReader(temp, code);
str = sr.ReadToEnd(); // 读取文件
}
catch(Exception exp)
{
HttpContext.Current.Response.Write(exp.Message);
HttpContext.Current.Response.End();
sr.Close();
}
string htmlfilename=path + DateTime.Now.ToString("yyyyMMddHHmmss")+".html";
// 替换内容
// 这时,模板文件已经读入到名称为str的变量中了
str = str.Replace("ShowArticle",strText); //模板页中的ShowArticle
str = str.Replace("title",strText);
str = str.Replace("content",strContent);
str = str.Replace("author",strAuthor);
// 写文件
try
{
sw = new StreamWriter(htmlfilename,false,code);
sw.Write(str);
sw.Flush();
}
catch(Exception ex)
{
HttpContext.Current.Response.Write(ex.Message);
HttpContext.Current.Response.End();
}
finally
{
sw.Close();
}
return true;
}
}
}
2、TestNews.aspx文件:
添加三和TextBox分别为:tbx_Title、tbx_Content、tbx_Author和一个Button:btn_AddNews。
TestNews.aspx.cs文件
private void btn_AddNews_Click(object sender, System.EventArgs e)
{
MyConvert Hover = new MyConvert();
if(Hover.WriteFile(this.txb_Title.Text.ToString(),Server.HtmlDecode(this.txb_Content.Value),this.txb_Author.Text.ToString()))
{
Response.Write("添加成功");
}
else
{
Response.Write("生成HTML出错!");
}
}
3、添加模板text.html文件
<head>ShowArticle</head>
<body>
title<br/>
content<br/>
author
</body>
说明:一.news文件夹必须赋予asp.net用户写入的权限。这是一个简单的实现例子,实际项目必须先将数据保存到数据库下面,在datagird中调用数据库下面html文件的URL地址。二.默认情况下,我们是不能向TextBox、TextArea中添加html语法的,必须修改config文件,在<system.web>下面添加<pages validateRequest="false" />,但是这样做的话,整个项目中都允许键入html标签了,暂时还不知道其他的方。
缺点:这种方法是在ASP.net在页面所有内容生成后、输出内容前对页面内容进行操作以前曾说过用HttpModule来在Response前更改,不够灵活,每行修改response,比较费力。第二种方法:
重写AttributeCollection.Render,比较灵活(msdn如是说:“在呈现阶段,所有 ASP.NET 移动设备适配器都通过一个称为文本编写器的对象来编写它们的输出。文本编写器对象是从 TextWriter 基类创建的。”)
可以写个基类,如:
public class BasePage: System.Web.UI.Page
{
public BasePage()
{
}
protected override void Render(System.Web.UI.HtmlTextWriter writer)
{
string name=Request.Url.AbsolutePath.Substring(1,Request.Url.AbsolutePath.Length-1).Replace("aspx","htm");
string newurl="";
if(name.IndexOf("/")>0)
{
newurl=Server.MapPath("../") + name;
}
else
{
newurl=Server.MapPath("./") + name;
}
MemoryStream ms = new MemoryStream();
StreamWriter sww = new StreamWriter(ms);
StreamWriter swr = new StreamWriter(newurl);
System.Web.UI.HtmlTextWriter htmlw = new HtmlTextWriter(swr);
base.Render(htmlw);
htmlw.Flush();
htmlw.Close();
string strLL = System.Text.Encoding.UTF8.GetString(ms.ToArray());
Response.Write(strLL);
Response.Redirect(Request.Url.AbsoluteUri.Replace("aspx","htm"), true);
}
}
然后在需要生成静态页面的页面中继承就可以了。