1.ASP.NET MVC3 中的路由
同前邊一樣本篇並不會過多的介紹理論知識,我們在Global.asax.cs檔案中可以看到如下代碼:
routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults);
下邊我們模仿上邊來完成一個我們將會用到的路由,如下:
routes.MapRoute( null, // 沒必要指定路由名 "{controller}/{action}/{id}", // URL with parameters new { controller = "Archive", action = "Post", id = UrlParameter.Optional } // Parameter defaults);
上邊兩者定義的 Url 分別如下:
關於路由原理、路由順序、各種重載的寫法這裡不詳細介紹,給出第2個主要為了下邊工作的進行。
2.ASP.NET MVC3 中多資料集的返回
如上邊提到的,在前一篇中,我們已經實現了在Home頁中讀取並顯示資料,接下來,當使用者點擊閱讀的時候,應該跳轉到詳細頁來閱讀詳細內容,我們按先前的方法添加名為 Archive 的控制器,並為其建立名為 "Post" 的視圖。
接下來,我們需要在 Archive 控制器中完成資料的讀取,因為我們在顯示文章詳情的同時要顯示使用者的評論,這樣 Article 對象和 ArticleComment 對象為兩個實體。本篇將重新建立一個類,用來返回,如下:
public class ACModel{ //C# 3自動屬性 public Article Article { get; set; } public IEnumerable Comment { get; set; }}
接下來,我們分別擷取我們需要的資料,並返回,如下:
//根據文章ID查詢,返回結果public ActionResult Post(int id){ //單一的Article實體 var article = android.Article.Single(a => a.ID == id); // 使用Linq查詢, comments是IEnumerable集 var comments = from a in android.ArticleComment where a.ArticleID == id select a; ACModel model = new ACModel { Article = article, Comment = comments }; return View(model);}
可能有很多直接學習 ASP.NET MVC 的朋友對 Linq 文法並不是很瞭解,如果你不是很瞭解的話可以看看基本 LINQ 查詢操作 (C#),因為我們後邊使用到的分頁等會常用到。
可見,這樣就解決了在 ASP.NET MVC3 中一個 View 中返回多個資料集的問題,我們顯示資料時可根據 ACModel 對象的屬性來完成。當然,也可以通過使用視圖等,並建立對應的類來解決此類問題。接下來,就要在 View 中來進行顯示了:
//Model 是ACModel對象的引用,前邊已經提過@model Android.Controllers.ArchiveController.ACModel@{ var article = Model.Article; var comment = Model.Comment; }
顯示文章標題為:@article.Title,顯示評論時,因為comment為IEnumerable集,顯示時進行遍曆,如下:
@foreach (var c in comment){ <p>@c.Comment</p>}
因為這裡進行資料顯示時,同上篇類似,所以在這裡就簡單的描述下。希望本篇在 ASP.NET 中返回多個資料集能給你帶來一些協助,下篇我們簡單看看 ASP.NET MVC3 中頁面配置方法。