demoshop

NEWS

demo, trying to be the best.

站內搜尋載入中...

ASP.NET MVC架構初體驗筆記(二)

  • 6556
  • 2

今天聽從老闆的話從Tutorials來看點基本的東西,經由昨天的影片洗禮後現在來看code還滿好上手的,今天看了一半來紀錄一下吧。

    網址在這http://www.asp.net/learn/mvc/,範例相當的好,因為每個單元都擁有VB和C#的Code讓你更沒有藉口說看不懂(昨天介紹的影片示範是VB)。

     

    目前demo看到第五篇卡住了一下,因為此篇再解說MVC的URL Routing這是一個很重要的機制,也是一個很好用的東西,demo因為覺得他很重要所以特別花時間研究一下以下就是紀錄。

    情境一

    我們在Global.asax頁面建立一個網址規則

    routes.MapRoute("blog", "action/{id}", new { controller = "test", action = "Details", id= "" }); 

    然後在 index.aspx寫了兩個連結,一個使用HTML helpers一個使用HTML組字串的

    <%= Html.ActionLink("test", "Details",new { id = 2 })%>
    <a href="/action/87">YYYYYYY</a> 

    然後我們把滑鼠一過去可以看到程式自動產生的網址是
        http://xxx/action/2
        http://xxx/action/87


    然後再來看看testController.cs裡面我們使用id或直接定個變數ida的結果
        public ActionResult Details(int? id)正確接值
        public ActionResult Details(int? ida)接不到值


    情境二

    Global.asax

    routes.MapRoute("blog", "action/{idb}", new { controller = "test", action = "Details", id= "" });

     testController.cs

    public ActionResult Details(int? id) 

    index.aspx

    1. <%= Html.ActionLink("test""Details",new { id = 2 })%> 
    2.   //產生的連結 http://xxx/home/Details/2 
    3.   //直接死因為他找不到home/Deatils 
    4.   //因為依據MapRoute的解釋網址格式必須是action/xxx才會使用test的controller並且呼叫Details動作 
    5.   <a href="/action/87">YYYYYYY</a> 
    6.   //產生的連結 http://xxx/action/87 
    7.   //也接不到值,因為依據MapRoute的解釋action/後接的值應該叫做idb而我們在controller是使用id接值 

     

    <%= Html.ActionLink("test", "Details",new { id = 2 })%>
      //產生的連結 http://xxx/home/Details/2
      //直接死因為他找不到home/Deatils
      //因為依據MapRoute的解釋網址格式必須是action/xxx才會使用test的controller並且呼叫Details動作
      <a href="/action/87">YYYYYYY</a>
      //產生的連結 http://xxx/action/87
      //也接不到值,因為依據MapRoute的解釋action/後接的值應該叫做idb而我們在controller是使用id接值
    
    
    
    //因此我們來把MapRoute的改變一下
    routes.MapRoute("blog", "action/{idb}", new { controller = "test", action = "Details", idb = "" });
     
    //這時候
    <%= Html.ActionLink("test", "Details",new { id = 2 })%>
    //產生的連結 http://xxx/action?id=2
    //正確抓到值
    //根據MapRoute解釋idb我們帶出去的參數名稱,但在controller中使用id接值所以會自動幫我們轉換成?id
    <a href="/action/87">YYYYYYY</a>
    //產生的連結 http://xxx/action/87
    //接不到值
    //因為依據MapRoute的解釋action/後接的值應該叫做idb而我們在controller是使用id接值,並且因為是直接寫HTML TAG所以沒有HTML Helppers無法幫我們轉換
     
    //那如果我們把new的參數改成
    <%= Html.ActionLink("test", "Details",new { idb = 2 })%>
    //產生的連結 http://xxx/action/2
    //你覺得接的到嗎?
    //答案當然是否定的,在testController的Details傳入的參數名稱是id所以當然idb一定接不到 

    所以我們可以得到一個規則

    • 當MapRoute的網址規則與new出來的參數一樣時HTML Helpers會自動判定所呼叫的ActionController接值的變數名稱
    • 當使用HTML Helpers你new什麼參數出來,就換傳遞什麼名稱的參數出去,如果符合MapRoute就會縮寫,並不會用?id=傳出去

     


    結論就是我們要把MapRoute拆開來看

    routes.MapRoute("blog",//名稱
        "action/{idb}",//參數
        new { controller = "test", action = "Details", idb = "" });//參數的預設值 

    你可以直接把參數想成自己寫HTML TAG的規則如上{idb}傳出去的名稱就是叫做idb, 參數預設值可以想成使用HTML Helpers的規則,因此當建立MapRoute的時候參數的名稱當然要讓它和預設值的參數名稱一樣,這樣我們才可以享受HTML Helpers的優勢。

     

    以下的是今天的筆記

    • 建立Controller類別的時候要保持XXXcontroller命名方式,沒有controller字串 編譯器將不認識這是一個控制類別
    • Global中的網址規則為{controller}/{Action}/{id}那帶入的就必須符合,比如說id就要new 一個出來,如改用{gid}那就必須要new 一個gid不然為無法辨識new{gid=my.id},會改成用參數丟出來。
    • 使用連結的時候以下兩個是相通的
    • <a href="/Home/Complete/<%= task.id.ToString() %>">Complete</a>
    • <%= Html.ActionLink("完成","Complete",new {id=task.id} )%>--這個叫做HTML helpers
    • 當你在controller有使用 return view()的時候就必須要實做該.aspx頁面在相對應的views內


    而下面這是官方的資料,這很重要

    1. ViewResult – Represents HTML and markup.
    2. EmptyResult – Represents no result.
    3. RedirectResult – Represents a redirection to a new URL.
    4. RedirectToRouteResult – Represents a redirection to a new controller action.
    5. JsonResult – Represents a JavaScript Object Notation result that can be used in an AJAX application.
    6. ContentResult – Represents a text result.

     

    1. View – Returns a ViewResult action result.
    2. Redirect – Returns a RedirectResult action result.
    3. RedirectToAction – Returns a RedirectToRouteResult action result.
    4. RedirectToRoute – Returns a RedirectToRouteResult action result.
    5. Json – Returns a JsonResult action result.
    6. Content – Returns a ContentResult action result.

    以上就是今天的筆記,MVC到目前為止demo還有很多問題沒看到答案,明天繼續把Tutorials給K完吧