所谓静态化,就是用.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;
}
这样写完了,我们只需要在第一次加载的时候创建出一个新的页面,以后再访问同一个新闻标题时就不需要从数据库中读取了。
在这里,我写的是一个新闻标题的例子,但在实际应用当中我们把数据不频繁改的的,或页面格局不常改用的我们可以这样写的,这就是我对模板引擎的理解,有什么不对的地方,请多多指教。
浙公网安备 33010602011771号