2011年11月15日 星期二

ASP.NET MVC 學習推薦網站

初學ASP.NET MVC 學習筆記(五)-自訂Helper
初學 ASP.NET MVC 學習筆記(七)-Server端驗證

黑暗執行緒 -- ASP.NET MVC 3 豬走路 範例 (View Engine,選Razor)


回目錄
回首頁


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 才能看出它的效果,如下圖所示:

回目錄
回首頁