您的位置:首页 > 编程语言 > ASP

asp.net开发网站时,用模板来生产静态页面

2010-06-02 11:36 357 查看
asp.net开发网站时,用模板来生产静态页面。你有可能没用过,但不可能没听说过吧?我没用过,没写过。但听说过,甚至实现细节也听说了:写一个静态的页面,里面写好自己定义的标签,比如$title $foot等等类似的,然后在另外一个页面的后台代码CS文件里,读取该模板,然后把相应的标签替换成数据库里的数据。

这么做真的好吗?

前两篇文章:

asp.net网站生成静态页面演示示例(2)(2008-5-6 13:30:52)

asp.net网站生成静态页面演示示例(2008-5-6 12:03:18)

用模板来生产静态页面的疑问:

开发方便吗?要自定义标签,我不会,也不想学。这个标签应该没有微软提供的<asp:Label类似标签方便好用。

后期维护容易吗?以后还要改这个标签,烦啊!还不如用微软的“标签”了。

传统的最普通的asp.net网站开发就是添加一个页面,然后拖拽控件上去,然后双击写代码。这种应该是每个ASP.NET程序员必会的吧?也是最开始学习ASP.NET时用的方法。我们能不能用最简单的方式实现呢?不要去改变这种开发方式,因为很多项目开发,不是我一个人开发,也不是你一个人开发,是团队大家协作开发。那么大家都会的就是传统的开发方式,我想应该尽量的用大家都会的语言、框架、开发模式来开发。这里我不是说拒绝新知识、新技术、新的开发工具和模式。如果新的工具或方法确实效率高、成熟稳定,我想我会去学习。

我说的一种生成静态页面的方式就是前面链接里提到的第一种开发方式:asp.net网站生成静态页面演示示例,这个开发方式不需要任何人改变自己的开发习惯和思路。只需要有个人把别人开发好的程序new WebClient().DownloadFile(.....)就生产了一个静态页面,可以说是最最简单方便的生产静态页面的方法。

有兴趣的朋友可以在评论中跟我探讨该话题。欢迎拍砖!!!

asp.net网站生成静态页面演示示例

asp.net网站开发中经常需要生成静态页面。

生成静态页面的好处:

1、提升网站性能、负载能力。

2、提高网站安全性。

3、利于搜索引擎收录。

以上3点优势,足以让广大asp.net程序员对生产静态网页趋之若骛了。

本文主要讲述一种比较简单、方便的实现方法,适合交互性不多的网站使用。例如新闻资讯、产品展示等。这次讲的静态页面是生成真正的静态网页,可以脱离.net直接在IIS上运行的页面。好了,不多说了。直接贴代码吧:

核心代码如下:

protected void Button1_Click(object sender, EventArgs e)

{

string url = "http://" + Request.Url.Authority + "/default.aspx";

new System.Net.WebClient().DownloadFile(url, Server.MapPath("~/default.html"));

Response.Redirect("default.html");

}

如果需要根据参数生成不同的文件,比如新闻页面,每个新闻一个文件,只需要传递不同的URL参数,和保存的文件路径即可。这里需要注意一下,获取自己网站的网页,有可能会造成“死锁”,感觉几率很少,至少我没遇到过。然后前台的链接也要修改成相应的静态页面的链接。这样整个网站就部分静态化了。而且这种开发模式的好处就是,基本不需要改变你开发的框架和自己的开发习惯。欢迎有兴趣的朋友加我QQ:4111852讨论静态页面的问题。

下次我会讲另一种生产静态页面的方式。

演示项目详细源代码加载地址:http://www.svnhost.cn/Download/Detail-104.shtml

asp.net网站生成静态页面演示示例(2)

接前一文章:asp.net网站生成静态页面演示示例

这个代码方案也是参考了很多人的代码写出的。在此对这些无名的奉献者表示感谢。

贴一个核心的代码吧:

using System;

using System.Web;

using System.Web.UI;

using System.IO;

using System.Text;

using System.Text.RegularExpressions;

using System.Configuration;

namespace BLL

{

/// <summary>

/// PageBase 的摘要说明。

/// </summary>

public class PageBase : Page

{

private static object obj = new object();

//// <summary>

///  重写默认的HtmlTextWriter方法,修改form标记中的value属性,使其值为重写的URL而不是真实URL。

/// </summary>

/// <param name="writer"></param>

protected override void Render(HtmlTextWriter writer)

{

string url = Request.RawUrl.ToLower();

if (Request.RequestType.ToLower().Equals("get"))

{

URLRewrite u = (URLRewrite)HttpContext.Current.Items["siteurl"];

if (u != null && u.Cache > 0)

{

string CacheFile = Server.MapPath("/Cache" + url + ".html");

FileUtil.CreateDirectory(CacheFile);

lock (obj)

{

using (StreamWriter sw = new StreamWriter(CacheFile, false, Encoding.UTF8))

{

base.Render(new FetchHtmlWriter(writer, sw));

sw.Flush();

sw.Close();

sw.Dispose();

}

Cache.Add(url, string.Empty, null, DateTime.Now.AddSeconds(u.Cache), TimeSpan.Zero, System.Web.Caching.CacheItemPriority.High, null);

return;

}

}

}

if (writer is System.Web.UI.Html32TextWriter)

{

writer = new FormFixerHtml32TextWriter(writer.InnerWriter);

}

else

{

writer = new FormFixerHtmlTextWriter(writer.InnerWriter);

}

base.Render(writer);

}

}

public class FormFixerHtml32TextWriter : System.Web.UI.Html32TextWriter

{

public FormFixerHtml32TextWriter(TextWriter writer)

: base(writer)

{

}

public override void WriteAttribute(string name, string value, bool encode)

{

// 如果当前输出的属性为form标记的action属性,则将其值替换为重写后的虚假URL

if (string.Compare(name, "action", true) == 0)

{

value = HttpContext.Current.Request.RawUrl;

}

base.WriteAttribute(name, value, encode);

}

}

public class FormFixerHtmlTextWriter : System.Web.UI.HtmlTextWriter

{

public FormFixerHtmlTextWriter(TextWriter writer)

: base(writer)

{

}

public override void WriteAttribute(string name, string value, bool encode)

{

if (string.Compare(name, "action", true) == 0)

{

value = HttpContext.Current.Request.RawUrl;

}

base.WriteAttribute(name, value, encode);

}

}

}

详细代码下载:asp.net生成静态页面

有不清楚的地方,可以加QQ群:49745612一起探讨。

跟前一种,生成静态页面的方案比,这种复杂得多,个人更喜欢前面的实现方式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: