您现在的位置: 破洛洛 >> 建站学院 >> 网站开发 >> ASP.NET >> 正文

DynamicData for Asp.net Mvc留言本实例上篇:准备工作及显示文章列表

作者:佚名 来源:网络整理 更新时间:2010-7-2
分享到
本文环境为Visual Studio 2008/Sql Server 2005

  建立一个Asp.net Mvc工程:DMvc

  引用Microsoft.Web.DynamicData.Mvc.DLL,及系统组件System.ComponentModel.DataAnnotations和System.Web.DynamicData

  在Web.config中的pages/namespaces添加一个add节点其namespace属性为Microsoft.Web.DynamicData.Mvc

  system.web/compilation /assemblies中添加节点add <add assembly="System.Web.DynamicData, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>

  将DynamicDataMVC中Views/Shared/ 中的ValidationSummary.ascx EntityTemplates及FieldTemplates复制到我们新建的Mvc工程的Views/Shared文件夹

  数据库准备工作

  建立Articles表

  打开Microsoft SQL Server Management Studio连接后对数据库点右键,新建数据库

DynamicData for Asp.net Mvc留言本实例上篇:准备工作及显示文章列表

  生成Linq to Sql的dbml文件:

  如果不会建,可以搜索关键字:Linq to SQL入门

DynamicData for Asp.net Mvc留言本实例上篇:准备工作及显示文章列表

  这个DataContext叫做DMvcDataDataContext

  为了查询方便,我们先向其中加些数据(不多写了,也就20条就够了)

INSERT INTO [Articles]([Title],[Body],[AddTime],[Author]) 
 VALUES('文章1','内容1',getdate(),'重典') 
INSERT INTO [Articles]([Title],[Body],[AddTime],[Author]) 
 VALUES('文章2','内容2',getdate(),'重典') 
INSERT INTO [Articles]([Title],[Body],[AddTime],[Author]) 
 VALUES('文章3','内容3',getdate(),'重典')

让网站运行起来,显示文章列表

  先来个效果图(我美工就这么地了,大家谅解一下)

DynamicData for Asp.net Mvc留言本实例上篇:准备工作及显示文章列表

  就是将文章列了出来,我们下面为了这个目标而努力

  首先,也是很重要的,要先在Application_Start中添加我们要自动化的DataContext

protected void Application_Start() { 
 RegisterRoutes(RouteTable.Routes); 
 var model = new MetaModel(); 
 model.RegisterContext(typeof(DMvc.Models.DMvcDataDataContext), 
 new ContextConfiguration { ScaffoldAllTables = true }); 
 }

  如果您不知道Application_Start在哪里,可以百度一下:Global.asax文件的作用

  我们建一个新的Controller:ArticleController来专门进行Article的CRUD(Create/Read/Update/Delete).

  我们首先建一个叫List的Action.从数据库中读取数据放入ViewData.Model中

public class ArticleController : Controller { 
 /// <summary> 
 /// 文章列表 
 /// </summary> 
 /// <param name="p">当前页号</param> 
 /// <param name="ps"> pagesize</param> 
 /// <returns></returns> 
 public ActionResult List(int? p, int? ps) {// 
 if (!p.HasValue) p = 1;//处理为空时的情况 
 if (!ps.HasValue) ps = 4;//默认一页4条 
 using (var db = new DMvcDataDataContext()) { 
 var x = new PagedList<Articles>(db.Articles, p.Value, ps.Value);//读取数据并自动分页 
 return View(x); 
 } 
 } 
 }

这里我们用到了PagedList这个类来将db.Articles自动分页,它是DynamicData的一个辅助工具,用起来还算不错

  我们再建立一个View页使之继承于PagedList<Articles>

  即:

  public partial class List : ViewPage<PagedList<Articles>> { }

  在view中我们写如下代码:

<!--显示列表开始--> 
 <%foreach (var a in ViewData.Model) { %> 
 <fieldset> 
 <legend> 
 <% Html.RenderDynamicField(a, "Title"); %></legend> 
 内容:<%Html.RenderDynamicField(a, "Body"); %><br /> 
 发表日期:<%Html.RenderDynamicField(a, "Addtime"); %> 
 作者:<%Html.RenderDynamicField(a, "Author"); %> 
 </fieldset> 
 <% } %> 
 <!--显示列表结束--> 
 <!--分页的按钮开始--> 
 分页按钮 
 <% if (ViewData.Model.HasPreviousPage) { %> 
 <%=Html.ActionLink("第一页", "List", new { p=1},null)%> 
 <%=Html.ActionLink("上一页", "List", new { p = ViewData.Model.CurrentPage - 1 }, null)%> 
 <% }else { %> 
第一页 上一页 
 <% } %> 
 当前:<%= ViewData.Model.CurrentPage %> /共<%= ViewData.Model.TotalPages%>页 
 <% if (ViewData.Model.HasNextPage) { %> 
 <%=Html.ActionLink("下一页", "List", new { p = ViewData.Model.CurrentPage + 1 }, null)%> 
 <%=Html.ActionLink("最后页", "List", new { p = ViewData.Model.TotalPages }, null)%> 
 <% }else { %> 
 下一页 最后页 
 <% } %> 
 <!--分页的按钮结束-->


  虽然有点乱,但是基本上分成数据显示和分页按钮两个部分最后访问/article/List?p=2就会看到前面图中的效果

本文示例源代码或素材下载

转载请注明:破洛洛(谢谢合作)
网友评论: