LearnMVC5-AddController

原創文章,轉載必需註明出處: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的應用程序包含:函數

  •  Models:表明應用程序數據以及使用數據嚴重邏輯執行業務規則的類
  •  Views:應用程序動態生成Html響應的模板文件
  •  Controllers:處理瀏覽器傳入請求,獲取Model的數據,執行視圖模板、而後將它們響應到瀏覽器的類

在這一系列的文章中咱們將涵蓋這些概念,並向引導大家如何使用它們去建立一個應用程序。學習

下面咱們將開始建立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響應。下一遍文章咱們將講解如何實現它。

本站公眾號
   歡迎關注本站公眾號,獲取更多信息