快捷搜索:  as  2018  FtCWSyGV  С˵  test  xxx  Ψһ  w3viyKQx

葡京娱乐场的官网_龟发之家论坛



在上一篇文章中,我创建了一个Blog项目,本日我盘算继承折腾一下这个项目。

假如你还不懂得ASP.NET MVC3的结构,你可以先看看这篇文章,应该会对你有所赞助的。

主要讲一下自己对ASP.NET MVC3中的局部视图以及缓存的熟识,不多说先上几幅图吧。

先说分页栏吧

要做成上面的导航栏,我们必要哪些数据呢? 1. 当前页码2. 每页显示若干文章 3. 数据库里有若干文章

OK,既然只要必要这些,那我们就在HomeController的IndexAction里经由过程ViewBag供给给他吧。

public class HomeController : Controller

{

BlogDB db = new BlogDB();

// GET: /Home/page/5

public ActionResult Index(葡京娱乐场的官网int page = 1)

{

int countPerPage=10;

var posts = db.Posts.Include("Category")

.Include("Tags").Include("Comments")

.OrderByDescend葡京娱乐场的官网ing(p=>p.CreateTime)

.Skip((page - 1) * countPerPage)

.Take(10);

ViewBag.CurrentPage = page;

ViewBag.CountPerPage = countPerPage;

ViewBag.PostsCount = posts.Count();

return View(posts);

}

}

数据有了,就让我们开初创建局部视图吧。

打开右击View文件夹中的Share文件夹,选择添加视图。我这里将他命名为_Pagination,留意

小技术 : 在 ASP.NET MVC3 中,假如一个视图以"_"开首命名的话,外部是不能零丁造访他的,他只能作为局部视图嵌套在其他视图中。

打开刚刚创建好的视图,添加如下代码

@{

int pageCount = ViewBag.PostsCount / ViewBag.CountPerPage + 1;

int currentPage = ViewBag.CurrentPage;

}

First

@for (var i = 1; i

@i

}

else

{

@i

}

}

@if (currentPage == pageCount)

{

Next

}

else

{

Next

}

我们在Home Index View中调用这个局部视图

@model IEnumerable

@{

ViewBag.Title = "NinoFocus | Notepad";

}

@Html.Partial("_PostList", Model)

@Html.Partial("_Pagination")

恩,好了,分页栏就算完成了。

接下来Sidebar

Sidebar 和 分页栏 不合,由于分页栏只在首页显示,所有首页可以供给数据给他。而Sidebar确凿无论哪个页面都要显示的,以是他必须要自己给自己供给数据。

好,看到这里可能有人会想,那还反面上面的一样吗?我在页面上写一些办事器真个代码,供给数据会逝世啊?

就像这样

一些酷酷的 网站

@foreach (var link in new Blog.Models.BlogDB().FriendLinks)

{

@link.Name

- @link.Description

}

会逝世吗?当然不会啦,这也是一种办理措施啊(虽然我不保举在)。然则,我想想又感觉不当啊,Sidebar的数据更新频率很低的啊,这样每次刷新页面或者浏览其他页面都要从新哀求数据库,这是不是不当啊?

为了让他变得妥妥的,同时也充分的压榨一下ASP.NET MVC的特点。我照样抉择应用ChildAction了。

添加一个ChildActionController,主要认真一些局部视图的事情(着实便是供给数据用的)。下面我以Sidebar中的友情链接为例,说一下Action的代码。

[ChildActionOnly]

[OutputCache(Duration = 3600)]

public PartialViewResult SidebarFriendLinks()

{

var links = db.FriendLinks;

return PartialView(links);

}

[ChildActionOnly] 属性阐明这个Action只能内部调用,不能被外部零丁造访。

[OutputCache] 启用缓存,Duration字段是缓存光阴,以秒为单位,这里我设为1小时。

为了您的康健Action的返回值类型照样用 PartialViewResult 不要用日常平凡常用的 ActionResult ,不然会逝世很多脑细胞的,我昨晚就被这个搞逝世。 ASP.NET MVC 遵照DRY(Don't repeat yourself)原则,假如你没有为ActionResult的View指定模板页的话,他会自动的给你加上默认的模板页。默认的模板页可以在_ViewStart.cshtml文件中指出

@{

Layout = "~/Views/Shared/_Layout.cshtml";

}

假如你看了我上面保举的关于ASP.NET MVC3结构的文章,你会知道这是好器械的。

让我们模拟一下页面的调用,我们在应用了模板页的页面中调用SidebarFriendlinks,然后SidebarFriendLinks有调用了模板,然后模板页调用了SidebarFriendLinks,然后。。。。然后你就悲剧了啊。

假如您必然要应用ActionResult作为返回值的话,那就给局部页面加高低面的语句吧

@{

Layout = null;

}

所以为了康健,照样应用PartialViewResult吧。

恩,就此打住,让我们继承吧。右击SidebarFriendLinks选择添加视图。

让我们打开SidebarFriendLinks.cshtml文件,改动一下@model 后的语句,然后添加页面代葡京娱乐场的官网码

@model IEnumerable

一些酷酷的 网站

@foreach (var link in Model)

{

@link.Name

- @link.Description

}

然后在_Sidebar.cshtml中调用他

@Html.Action("SidebarTags","ChildAction")

@Html.Action("SidebarArchive","ChildAction")

@Html.Action("SidebarFriendLinks","ChildAction")

这样写的 sidebar 今后我是不是就可以经由过程设置设置设备摆设摆设文件来节制里面的内容了呢,嘎嘎噶!!!

着末奉上_Layout.cshtml的代码,只求大年夜家对这个博客的页面布局有个加倍清晰的懂得

@Html.Partial("_Header")

@Html.Partial("_Navigation")

@RenderBody()

@Html.Partial("_Sidebar")

@Html.Partial("_Footer")

@RenderSection("footerScript",false)

@RenderBody() 便是其他页面添补内容的地方。

@RenderSection("footerScript",false) 预留的空间,第一个参数表示名称,第二个参数假如是fals葡京娱乐场的官网e的话,表示不是每个页面都必须往里面添加内容;假如是true的话,就表示应用了这个模板的页面都必须往里面填写内容。

在页面上,可以这样调用

@section footerScript{

...javascript here

}

看看缓存是否有效

打开SQL Server Profiler来监视一下数据库哀求。

1. 未开启缓存时

在没有开启缓存的环境下,我每次刷新博客首页,会有5条(我sidebar里放了3个局部页面)数据库哀求

为什么应用EF时同样的SQL语句会被哀求两次?求解!!!我这里暂且算他一葡京娱乐场的官网次先。

2. 开启缓存时

现在我启用sidebar的缓存,来看看刷新页面的数据库哀求次数

哀求次数从5次,变成2次了。阐明缓存成功开启了。呵呵,有点爽爽的。

于是贪得无厌的我又把首页也加了缓存

//

// GET: /Home/page/5

[OutputCache(Duration=60*5)]

public ActionResult Index(int page = 1)

现在刷新页面看看

没稀有据库连接哀求了,啦啦啦啦。

貌似博客园的首页也加了缓存吧,似乎一两分钟的样子。

您可能还会对下面的文章感兴趣: