原創文章,轉載必需註明出處:http://www.ncloud.hk/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/learnmvc5-addcontroller/瀏覽器
本人是MVC新手,將從微軟官網學習MVC並將看過的英文文檔翻譯成中文,因爲本人英文水平很差,有翻譯不許確、錯誤的地方萬望指出,我看到後將會在第一時間修改。另外也但願這一系列文章能爲後來者起到引導做用。架構
微軟原文地址:http://www.asp.net/mvc/overview/getting-started/introduction/adding-a-controllermvc
添加控制器asp.net
MVC是model-view-controller的簡寫,MVC模式是一中易測試,易維護的開發應用程序架構。基於MVC的應用程序包含:函數
在這一系列的文章中咱們將涵蓋這些概念,並向引導大家如何使用它們去建立一個應用程序。學習
下面咱們將開始建立controller類,在Solution Explorer中右鍵controller文件夾而後點擊Add->Controller選項測試
在彈出的Add Scaffold中選擇MVC5 Controller-Empty 點擊Addurl
輸入新控制器的名字爲「HellowWorldController」,而後點擊添加spa
若是注意查看,你會發如今側邊欄SolutionExplorer中會有一個名爲HelloWorldController.cs文件和Views\HelloWorld文件夾,HelloWorld.cs文件也會在IDE中打開。.net
用下面代碼替換文件夾中的內容:
using System.Web; using System.Web.Mvc; namespace MvcMovie.Controllers { public class HelloWorldController : Controller { // // GET: /HelloWorld/ public string Index() { return "This is my <b>default</b> action..."; } // // GET: /HelloWorld/Welcome/ public string Welcome() { return "This is the Welcome action method..."; } } }
控制器的方法將返回一個字符創給HTML界面。控制器的名字爲HelloWorldController ,第一個方法的名字爲Index。下面咱們將調用他。
運行這個應用程序(點擊F5或者Ctrl+F5)。在瀏覽器地址欄中的地址後添加「HelloWorld」。(如:http://localhost:1234/HelloWorld)瀏覽器中顯示的界面以下所示。在上面的index方法中,代碼直接返回了一個字符串。這就至關於你告訴系統直接返回這個字符串到瀏覽器。
ASP.NET調用不一樣的控制器類以及不一樣的控制器方法依賴於傳入的URL。ASP.NET使用默認的路由邏輯解析傳入的URL來決定調用哪一個Controller和方法,默認路由模板以下:
/[Controller]/[ActionName]/[Parameters]
你能夠在App_Start/RouteConfig.cs文件中設置路由模板
public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); }
當你運行程序,且並不輸入任何URL時瀏覽器頁面會自動進入「Home」控制器,「Index」方法。這是由上面的路由模板代碼所指定的。
路由模板的第一部分決定了控制器類,因此「/HellowWorld」映射到HelloWorldController類。第二部分決定了控制器類中的Action方法,因此「/Helloworld/Index」執行HelloWorldController類中的Index方法。這裏有一點是咱們只須要在URL後面加上HelloWorld,Index方法就會被默認執行,這是由於Index方法在路由模版中被設置爲默認Action。路由模板的第三部分是路由參數,咱們將在後面慢慢講解。
運行應用程序,輸入URL:http://localhost:xxxx/HelloWorld/Welcome, Welcome方法將會運行並返回字符串「This is the Welcome action method..."。默認MVC映射規則爲/[Controller]/[ActionName]/[Parameters]。 對於輸入的URL解析則的到HelloWorld控制器以及控制器下的Welcome方法固然你並無輸入[Parameters] 部分。
咱們修改下上面的例子,讓咱們能夠經過URL傳遞參數到控制器,(如 /HelloWorld/Welcome?name=Scott&numtimes=4)。修改你的Welcome方法,使它包含兩個參數(以下),使用C#代碼的可選參數特性,若是沒有傳遞參數numTimes則設置numTimes的默認值爲1
public string Welcome(string name, int numTimes = 1) { return HttpUtility.HtmlEncode("Hello " + name + ", NumTimes is: " + numTimes); }
運行應用程序並輸入實例URL(http://localhost:xxxx/HelloWorld/Welcome?name=Scott&numtimes=4)。你也能夠在name和numTImes參數中嘗試輸入不一樣的值。ASP.NET模型綁定系統自動將你URL地址中輸入的查詢字符串映射到你指定的函數的參數中。
上面的例子中咱們並無使用路由模板中的第三個參數/[Parameters],咱們用查詢字符串傳遞name和numTimes參數。上邊連接中」?「是一個分隔符,查詢字符串跟在」?「後面。」&「則用來分離子查詢字符。
使用下面的代碼替換Welcome方法
public string Welcome(string name, int ID = 1) { return HttpUtility.HtmlEncode("Hello " + name + ", ID: " + ID); }
運行應用程序,並輸入:http://localhost:xxx/HelloWorld/Welcome/3?name=Rick
這時路由模板的第三個參數與路由中的參數ID匹配。由於Welcom方法中包含的參數ID與RegisterRoutes 函數中路由模板的第三個參數ID匹配。
public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); }
在ASP.NET MVC應用程序中,常常使用查詢字符串傳遞參數值。你也可使用路由傳遞name 和numtimes參數,在App_Start\RouteConfig.cs文件中添加「Hello」路由模板:
public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); routes.MapRoute( name: "Hello", url: "{controller}/{action}/{name}/{id}" ); } }
運行程序,並輸入:http://llocalhost:XXX/HelloWorld/Welcome/Scott/3
對大多數MVC應用程序來講,使用默認的路由模板就能夠。在本文的後續中咱們將講述使用「Model綁定」來傳遞從數據,因此你也不用修改默認路由。
在本文的例子中咱們使用MVC中V和C,即View和Controller。Controller直接返回到HTML界面。一般你不想Controller直接返回到HTML界面,由於這樣將代碼變得很是複雜。咱們習慣於使用一個單獨的ViewTemplate文件去生成一個HTML響應。下一遍文章咱們將講解如何實現它。