本樣本程式示範如何採用 Microsoft ASP.NET MVC Preview 5 和 LINQ TO SQL 開發 Web Application。
1. ASP.NET MVC 簡介
ASP.NET MVC架構是既ASP.NET WebForms後的又一種開發方式。它提供了一系列優秀特性,使ASP.NET開發人員擁有了另一個選擇。MVC是個將一個應用的實現分成三個組件角色的架構技術:模型,視圖和控制器。
在基於MVC的應用裡,Model(模型)是負責保持狀態的應用組件。這個狀態通常都持久於資料庫之中。
在基於MVC的應用裡,View(視圖)是負責顯示使用者介面的組件。這個UI通常是使用模型Model資料來建立的。
在基於MVC的應用裡,Controller(控制器)是處理使用者互動,操作模型Model和最終選擇用哪個視圖View來顯示UI的組件。在MVC應用中,視圖只是用來顯示資訊而已,是控制器來處理和回應使用者的輸入和互動的。
使用MVC方法的一個好處是,它有助於促進應用中模型,視圖,控制器間的關注的清晰分離。保持關注的清晰分離使得對應用的測試極其容易,因為不同應用組件間的契約的定義和表達是更明確的。
2. MVC 和 LINQ TO SQL 示範程式
下面是EntLib.com 論壇小組(http://forum.EntLib.com )針對 Microsoft ASP.NET MVC 架構最新版(Preview 5) 設計的一個簡單樣本程式。樣本程式基於EntLib.com Forum 資料庫示範,可以非常方便切換到其他資料庫。
如下是樣本程式的運行效果介面:
3. 構建基於LINQ TO SQL 的Model
下面是樣本項目來源程式:
其中Model部分,採用LINQ TO SQL 建立,樣本程式採用EntLib.com Forum 資料庫,添加了四個表,操作介面如下:
4. 建立EntLibForumController 控制器
EntLibForumController 類首先增加一個先前建立的Model – EntLibForumDataContext,然後編寫檢索論壇、主題和文章內容的方法。具體代碼如下 – 採用LINQ TO Object 技術:
public class EntLibForumController : Controller
{
private EntLibForumDataContext m_Forum = new EntLibForumDataContext();
public ActionResult Index()
{
// Add action logic here
throw new NotImplementedException();
}
public ActionResult Forums()
{
ViewData["Forums"] = DataContext.yaf_Forums.ToList();
return View();
}
public ActionResult Topics(int id)
{
ViewData["Topics"] = DataContext.yaf_Topics.Where(a => a.ForumID == id).ToList();
return View();
}
public ActionResult Messages(int id)
{
ViewData["Messages"] = DataContext.yaf_Messages.Where(a => a.TopicID == id).ToList();
return View();
}
#region Properties
private EntLibForumDataContext DataContext
{
get { return m_Forum; }
}
#endregion
}
5. 建立UI 視圖
建立UI View 比較簡單,在建立UI View時,選擇MVC View Content Page,Master Page 選擇Shared 目錄下的Site.Master 檔案。
下面是Forums.aspx 頁面的UI 及其代碼:
public partial class Forums : ViewPage
{
protected void Page_Load(object sender, EventArgs e)
{
grdForum.DataSource = (List<yaf_Forum>)ViewData["Forums"];
grdForum.DataBind();
}
}
歡迎訪問http://forum.entlib.com 開源ASP.NET論壇,擷取更多的.Net 技術資料和系統架構設計文檔,更有很多技術專家的知識共用。
附件:
MVC_Demo_EntLib.zip 548 KB, 下載 1,624 次.