ASP.NET MVC Music Store教程(2):控制器

來源:互聯網
上載者:User

轉自http://firechun.blog.163.com/blog/static/3180452220110272197830/

在傳統的Web架構中,URL總是映射到磁碟上的檔案。例如:一個類似於“/Products.aspx”或“/Products.php”的URL可能由“Products.aspx”或“Products.php”檔案來處理。

在基於MVC的Web架構中,URL的映射有一些不同,映射到檔案被替換成映射到類中的方法,這些類被叫做的“Controllers”(控制 器),由它們來響應和處理HTTP請求、使用者輸入、接收和儲存資料,並且決定如何將響應發回到用戶端(顯示HTML,下載檔案,重新導向URL等)。

添加 HomeController
我們通過添加一個控制器類來開始我們的MVC Music Store應用程式,它將處理連結到網站首頁的URL。遵照ASP.NET MVC的命名規範,我們給這個類取名“HomeController”。

在“方案總管”中的“Controllers”檔案夾上單擊右鍵,選擇“添加->控制器”命令:

 在“添加控制器”對話方塊中,將預設名稱改為“HomeController“,按“添加”按紐。

 這將建立一個新的檔案——HomeController.cs,並且包含下列代碼:

using System; 
 using System.Collections.Generic; 
 using System.Linq; 
 using System.Web; 
 using System.Web.Mvc; 
  
namespace MvcMusicStore.Controllers 

    public class HomeController : Controller 
    { 
        // 
        // GET: /Home/ 
        public ActionResult Index() 
        { 
            return View(); 
        } 
    } 
}

為了儘可能簡單地開始,我們用簡單的返回字串的方法來替換原來的Index方法,我們只需要做兩點簡單修改

  • 修改方法的傳回型別,由ActionResult改成string
  • 修改return語句返回字串“Hello from home”
現在,方法看起來是這樣:
public string Index()  {      return "Hello from Home";  }
啟動應用程式
原文很詳細,從來沒用過VS的看原文也知道怎麼運行,這裡不寫了,總之現在可以啟動程式,按F5(調試啟動)或Ctrl-F5(不調試啟動)
我們看到了這個:
 OK,相當快捷,我們建立了一個新的Web網站,添加了三行代碼,在瀏覽器中呈現出一段文本。很明顯,這隻是開始。
(關於VS虛擬IIS伺服器的解說文字,不寫了)
添加 StoreController
我們添加了一個簡單的HomeController實現網站首頁,現在,我們添加另一個控制器來實現音樂倉庫的瀏覽功能。倉庫控制器將實現下列功能:
  • 音樂倉庫的類別列表頁面
  • 列出某類別下的所有音樂唱片頁面
  • 顯示指定音樂唱片的詳細資料
(原文很囉嗦,不寫了)
重複添加HomeController的過程,將名字改為StoreController。
新的StoreController已經有了Index方法,我們使用Index方法來實現所有類別的列表頁面,同時再添加二個方法Browse和Details來實現另外兩個功能。
這些Controller(控制器)中的方法——Index、Browser和Detail被稱為“Controller Actions”,如同你已經看到的HomeController.Index()動作方法,它們的工作是響應URL的請求並且(通常來說)決定什麼樣的內容發回到瀏覽器或使用者請求的URL。
我們修改Index()方法,讓它返回字串“Hello from Store.Index()”,對Browse()和Details()方法也做類似的修改以完成StoreController的實現。
using System; 
 using System.Collections.Generic; 
 using System.Linq; 
 using System.Web; 
 using System.Web.Mvc; 
  
namespace MvcMusicStore.Controllers 

    public class StoreController : Controller 
    { 
        // 
        // GET: /Store/ 
        public string Index() 
        { 
            return "Hello from Store.Index()"; 
        } 
        // 
        // GET: /Store/Browse 
        public string Browse() 
        { 
            return "Hello from Store.Browse()"; 
        } 
        // 
        // GET: /Store/Details 
        public string Details() 
        { 
            return "Hello from Store.Details()"; 
        } 
    } 
}
再次啟動項目並分別在瀏覽下列URL:
  • /Store
  • /Store/Browse
  • /Store/Details
訪問這些URLs將調用控制器中的動作方法並返回字串:

太棒了!不過這僅僅是一些固定不變的字串,我們來讓它們變成動態:從URL中獲得一些資訊並把它輸出到網頁上。
首先,我們修改Browser動作方法,讓它接收來自URL的參數(QueryString)。我們為動作方法添加一個參數——gener,當動作方法被調用時,ASP.NET MVC會通過URL的QueryString或表單提交自動為它傳遞一個叫“gener”的參數。
// 
// GET: /Store/Browse?genre=?Disco 
public string Browse(string genre) 
 { 
    string message = HttpUtility.HtmlEncode("Store.Browse, Genre = " 
+ genre); 
  
    return message; 
 }
注意: 我們使用HttpUtility.HtmlEncode方法審核使用者輸入,這可以防止使用者使用類似/Store/Browse?Genre=<script>window.location=’http://hackersite.com’</script>這樣的連結對視圖進行JavaScript注入攻擊user 
現在,我們來瀏覽/Store/Browse?Genre=Disco

下一個修改是讓Details動作讀取並顯示一個名叫“ID”的輸入參數。與上一個方法不同的是,我們不想把ID的值放到QueryString參數中,而是直接把它作為URL的一部份,例如:/Store/Details/5
ASP.NET MVC很容易讓我們實現這樣的想法而不需要做任何設定,ASP.NET MVC的預設路由設定把URL中動作方法後面的部份看成一個名叫“ID”的參數,如果你的動作方法有一個叫“ID”的參數,ASP.NET MVC會自動這部份做為參數傳遞。
// 
// GET: /Store/Details/5 
public string Details(int id) 
 { 
    string message = "Store.Details, ID = " + id; 
  
    return message; 
 }
運行應用程式並且瀏覽/Store/Details/5

看看到目前為止我們做了什麼:
  • 在VS中建立了一個新的ASP.NET MVC項目
  • 討論了ASP.NET MVC應用程式的基本的目錄結構
  • 學習了如何使用ASP.NET程式開發伺服器運行Web網站(這部份我沒寫。。。)
  • 建立了兩個控制器類:HomeController和StoreController
  • 在控制器中添加了動作方法響應URL請求並把文本返回給瀏覽器

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.