DynamicData for Asp.net Mvc留言本例項 上篇 準備工作及顯示文章列表
DynamicDataMVC出現也有一段時間了,一直沒有正視它,今天抽一點時間瞭解了一下感覺還算不錯。
本身下載時自帶一個部落格的例子,但例子略顯複雜,不容易理清思路
附:本文初稿某兄入手先讀,提出諸多疑問想必其它朋友可能也會有類似問題,故藍字註明,當然大多朋友可以省去不看
下載及新建工程
本文環境為Visual Studio 2008/Sql Server 2005
1、建立一個Asp.net Mvc工程:DMvc
2、引用Microsoft.Web.DynamicData.Mvc.DLL,及系統元件System.ComponentModel.DataAnnotations和System.Web.DynamicData
3、在Web.config中的pages/namespaces新增一個add節點其namespace屬性為Microsoft.Web.DynamicData.Mvc
4、system.web/compilation/assemblies中新增節點add <add assembly="System.Web.DynamicData, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
5.將DynamicDataMVC中Views/Shared/ 中的ValidationSummary.ascx EntityTemplates
資料庫準備工作
建立Articles表
開啟Microsoft SQL Server Management Studio連線後對資料庫點右鍵,新建資料庫
生成Linq to Sql的dbml檔案:
如果不會建,可以搜尋關鍵字:Linq to SQL入門
這個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(),'重典')
讓網站執行起來,顯示文章列表
先來個效果圖(我美工就這麼地了,大家諒解一下)
就是將文章列了出來,我們下面為了這個目標而努力
首先,也是很重要的,要先在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就會看到前面圖中的效果