2011年11月15日 星期二

ASP.NET MVC 與 Linq to SQL 結合

ASP.NET MVC 資料庫應用可以使用微軟的新技術,Linq To Sql。

可以先參考 << 極意之道次世代 .NET Framework 3.5資料庫開發聖典ASP.NET篇,黃忠成,2008 >> 這本書,書內詳細說明 Linq To Sql 在 Visual Studio 2008 如何開始使用、語法、結合、....等等,有興趣的鄉民大可去參考這本書,這裡就不另贅述。

這裡是使用微軟的範例資料庫: northwind (北風)。

說著說著,我就已經弄好 Linq To Sql 類別,我抓了三個資料表,分別是 Products、Orders、Order_Details。



以下實作方法參考:初學ASP.NET MVC 學習筆記(六)-包裝Model

首先,我只要顯示出 Products 資料表內的資料,先建立一個資料夾在根目錄,我命名為 MyData,底下增一個類別為 Products.cs 檔案,大概內容為:

using MvcTest.Models; // 必要加入參考

namespace MvcTest.MyData
{
    public class Products
    {
        public IQueryable<Models.Products> _Products { get; set; }
    }
}
接著在 Controllers\HomeController.cs 程式碼中加入一些語法,因為是在 Index 顯示,所以在 Index 類別動點手腳:

using MvcTest.Models;
using MvcTest.MyData;

namespace MvcTest.Controllers
{
    [HandleError]
    public class HomeController : Controller
    {
        private NorthwindDataContext db = new NorthwindDataContext();
        private MyData.Products p = new MyData.Products();


        public HomeController()
        {
            ...
        }

        public ActionResult Index()
        {
            p.Products = from d in db.Products select d;

            return View(p);
        }

        ......
    }
}
我特別在類別上註記它來自於哪一個資料夾中,目的是怕命名的名稱會與 Linq To Sql 類別名稱相同,所以特此註記。

最後在 Index.aspx 程式碼中,可以是用類似 C# 程是語言的方式將 Products 的資料條列出來:

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" 
Inherits="System.Web.Mvc.ViewPage<MvcTest.MyData.Products>" %>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<table>
    <% foreach (var item in Model._Products)
       { %>
    <tr>
        <td>
            <%= Html.Encode(item.ProductID) %>
        </td>
        <td>
            <%= Html.Encode(item.ProductName) %>
        </td>
    </tr>
    <% } %>
</table>
</asp:Content>

最後執行頁面如下:

回目錄
回首頁




2011年11月6日 星期日

ASP.NET MVC 細部說明

接續上一篇文章 ASP.NET MVC 介紹和實作 ,接下來做 MVC 的細部說明。

在 \Controllers\HomeController.cs 程式碼中,將 MyMvc 函式程式碼改為以下所示:

public ActionResult MyMvc(string id)
{
    ViewData["Msg"] = "Hello World!";
    return View();
}

在 \Views\Home\MyMvc.aspx 程式碼中,將 ID 為 Content2 內標籤為 h2 的內容改為以下所示:

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent"
 runat="server">

    <h2><%=ViewData["Msg"] %></h2>

</asp:Content>

執行後,就會顯示 Hello World 字樣(下圖所示):

可能你會注意到,在上圖所展現的網址為 http://localhost/Home/MyMvc ,這是由於 Global.asax 應用程式的影響,我們可以對它做一些改變,使得生活變得更美好。
參考:Global.asax 檔案

那要怎麼對 Global.asax 應用程式動手腳呢?

針對 Global.asax,可以做以下改變:
public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        "Default", // 路由名稱
        "{controller}/{action}/{strName}/{strAge}", // URL 及參數
        new { controller = "Home", action = "Index", 
            strName = UrlParameter.Optional, strAge = UrlParameter.Optional } // 參數預設值
    );

}

我將 id 參數改為帶兩個參數值,strName 和 strAge,在 \Controllers\HomeController.cs 程式碼中,由於兩參數為 strName 和 strAge,所以如果都要使用參數,兩個參數都要引用,如以下程式碼所示:
public ActionResult MyMvc(string strName, string strAge)
{
    ViewData["Msg"] = "Hello World!";
    ViewData["Name"] = strName;
    ViewData["Age"] = strAge;
    return View();
}

在 \Views\Home\MyMvc.aspx 程式碼中,如果需要引用到函式中所設定的參數,則用 <%= ViewData["parameter"] %>,其他還有甚麼功能等我研究後會再發文章。所以程式碼改為如以下所示:

<h2><%=ViewData["Msg"] %></h2>
    My Name is <%=ViewData["Name"] %>, I'm <%=ViewData["Age"]%> years old.

最後執行要到 http://localhost/Home/MyMvc/DavidKuo/23 才能看出它的效果,如下圖所示:

回目錄
回首頁




ASP.NET MVC 介紹和實作

ASP.NET MVC Framework,它是一個以MVC設計樣式為理念的網頁開發技術,MVC是「Model (模型)、View(介面)、Controller(控制器)」三個單字字首的縮寫。

MVC 架構包括下列元件:
  • Model (模型):模型物件屬於實作應用程式資料網域邏輯之應用程式的一部分。
  • View (檢視): 檢視是顯示應用程式中使用者介面 (UI) 的元件
  • 控制器。 控制器就是元件,可以處理使用者互動、使用模型並且在最後選擇可以轉譯要顯示 UI 的檢視。

而ASP.NET MVC 的優點有:
  • 利於SEO
  • 利於維護
  • 掌握網頁細部運作、高度客製化
  • 整合運動 ASP.NET 功能
  • 利於團隊協同開發
  • 開發模式讓測試驅動式開發式或單元測式變得容易

以上引用參考:
Web 表單和 ASP.NET MVC 相比較
MVC wiki
ASP.NET MVC 概觀
ASP.NET MVC技術定位與抉擇

現在可以來做個簡易的 MVC。

作業系統:windows 7
開發環境:vs 2010

首先新增一個專案(如下圖所示):

在 \Controllers\HomeController.cs 檔案中,你可以加入一段程式碼:

public ActionResult MyMvc()
{
    return View();
}
接著選擇函式那一行程式碼在點擊右鍵(如下圖選取):

在 \Views\Shared\Site.Master 檔案中,加入一段程式碼(比對一下):

<div id="menucontainer">

    <ul id="menu">              
        <li><%: Html.ActionLink("首頁", "Index", "Home")%></li>
        <li><%: Html.ActionLink("關於", "About", "Home")%></li>
        <li><%: Html.ActionLink("我的MVC", "MyMvc", "Home")%></li>
    </ul>

</div>

執行後就會如下圖,多一個目錄選項:

回目錄
回首頁