重点:url重写、生成静态页
1、BookDetail.aspx
Page_Load():
if(!string.IsNullOrEmpty(Request.QueryString["id"]))//请求id不为空
{
int id = 0;
if(!int.TryParse(Request.QueryString["id"],out id))//id不能成功转换
{
Response.Redirect("/BoookList.aspx");
}
else//id能成功转换
{
StringBuilder builder = new StringBuilder();
//根据id取Model.Book实体
if(model != null)
{
//自己拼字符串,table
}
else
{
Response.Redirect("/BookList.aspx")
}
}
}
2、url重写
为什么进行url重写?
便于搜索引擎优化
(1)在MasterPage.Master的Page_Load中改
//node.NavigateUrl = "/BookList2.aspx?categoryId="+model.Id;
node.NavigateUrl = "/BookList_"+model.Id+".aspx";
(2)在BeginRequest事件中进行url重写
string url = Request.AppRelativeCurrentExecutionFilePath;//~/BookList_25.aspx
Match match = Regex.Match(url,@"~/BookList_(\d+).aspx")//判断url是否需要重写
if(match.Success)
{
int id = Convert.ToInt32(match.Groups[1].Value);//得到书目类别编号
//url重写,重新交给原url进行处理//BookList.aspx?categoryId="+model.Id;
Context.RewritePath("/BookList.aspx?categoryId="+id);
}
(3)修改Action属性的值
问题:点排序方式的提交按钮后url又回到原样式
A、建App_Browsers文件夹,在其中新建my.browser浏览器文件。加一个配置项:
<browser refID="Default">
<controlAdapters>
<adapter controlType="System.Web.UI.HtmlControls.HtmlForm" adapterType="BookShop.Web.UrlRewriterControlAdapter">
</adapter>
</controlAdapters>
</browser>
ASP.Net用.browser浏览器文件来确定浏览器功能
form标签加上runat = server即为HtmlForm
B、添加两个类 UrlRewriter.cs UrlRewriterControlAdapter.cs,这两个类负责修改submit按钮的action属性
3、静态页
静态页降低数据库、web服务器cpu的压力。
什么样的内容做成静态页?看新闻
(1)一站静态化
A、建CreateStatePage.aspx,放一个button,Text="生成静态页"
btnPage_Click()
{
//从BLL层获取图书列表list
if(list != null)
{
//每个model生成一个网页
foreach(Model.Book model int list)
{
//TODO:StringBuilder拼接html网页
//建StaticPage文件夹放静态页
File.WriteAllText(Server.MapPath("/StaticPage/"+model.Id+".html"),builder.ToString(),Encoding.UTF8);
}
}
}
B、改BookList中图片链接"/StaticPage/{0}.html"
(2)生成单个静态文件,按日期放在不同文件夹中
BLL层,加CreateStaticPage方法,根据图书的编号取得model,拼接字符串生成对应的静态页。
按日期分文件夹存放静态页
改BookList中标题链接 href='<%#GetDir(Eval("PublishDate"))%><%#Eval("Id")%>.html'
(3)按模板静态化
TemplatePage文件夹专门放模板,建BookContent.html模板文件。
用占位符代表模板中需要替换的内容。
在BLL.BookManager中的CreateStaticPage方法中读模板并替换:
string template = File.ReadAllText(HttpContext.Current.Server.MapPath("/TemplatePage/BookContent.html"));
string html = template.Replace("$title",model.Title).Replace("$body",model.ContentDescription);
js、css的引用应为绝对路径
RSS在线共享内容的一种简易方式。通常用在时效性较强的网站。
RSS阅读器
<?xml varsion=?>
可以抓取Post的蜘蛛