当今社会我们写程序必须之一就是讲究效率,那么怎么才能提高Web访问性呢?一句话:能不用数据库的就不用数据库,能静态化的静态化
       所谓静态化,就是用.html页面代替.aspx
       在这里跟大家分享我对模板引擎的理解
       就拿一个新闻列表做例,当我从数据库里读取所有的新闻标题之后,当我点击标题时会跳转到下一个.aspx页面,这里我们不这样做,我们现在GridView里一个编辑列里标题不用BoundFieid 而是用HyperLinkField把这个的DataNavigateUrlFields 的值为你数据库中表的Id,DataNavigateUrlFormatString 的值这样写 {0}.html 它的意思是代表这行的Id作为了html的名字,DataTextFormatString 的值 写为新闻的标题 title ,这样设定以后,当我们点击新闻标题时就会报出404错误,不知道大家写网站时了解这个web.config不,里面有注释的关于404的一些东西现在开始我把 那些代码写上去。
web.config中
  <customErrors mode="On" defaultRedirect="GenericErrorPage.htm">
          <error statusCode="403" redirect="NoAccess.htm" />
            <error statusCode="404" redirect="FileNotFound.aspx" />
        </customErrors>
里面的mode的值最初是RemoteOnly该为On切忌On首字母大写 而redirect后面显示的.aspx文件时下面的内容

FileNotFound.aspx中

 protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            string path = Request.QueryString["aspxerrorpath"];//要出错的那个Url
            string str = path.Replace("/WebSiteNews/", "");//把要出404错误的那个地址截取出xx.html
            str = str.Replace(".html", "");//把.html截取出来

            newss model = new newsTable().selectNewsOne(str);//把Id

            if (CreateHtml(path.Replace("/WebSiteNews/", ""), model))
            {
                Response.Redirect(path);
            }
        }
      
    }
    public bool CreateHtml(string nameid, newss news)
    {
        string str = "";
        bool val = true;
        FileStream sf = new FileStream(Server.MapPath("detail.html"), FileMode.Open);//这里的detail.html页面相当于一个模板页面,
        StreamReader sr = new StreamReader(sf, System.Text.Encoding.Default);//System.Text.Encoding.Default是转为电脑能识别的字
        str = sr.ReadToEnd();
        sr.Close();

        str = str.Replace("##Title##", news.Title);//这里我在detail.html中标题用##Title##" 表示的只有用数据库中读出的title替换掉就行了
        str = str.Replace("##Content##", news.Content);//同上

        //
        FileStream fs = new FileStream(Server.MapPath(nameid), FileMode.Create);

        StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.Default);

        sw.Write(str);

        sw.Close();
        fs.Close();

        return val;
    }

          这样写完了,我们只需要在第一次加载的时候创建出一个新的页面,以后再访问同一个新闻标题时就不需要从数据库中读取了。
          在这里,我写的是一个新闻标题的例子,但在实际应用当中我们把数据不频繁改的的,或页面格局不常改用的我们可以这样写的,这就是我对模板引擎的理解,有什么不对的地方,请多多指教。

posted on 2009-08-12 17:34  冬栀叶  阅读(391)  评论(0)    收藏  举报