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-controller

添加控制器

MVC是model-view-controller的簡寫,MVC模式是一中易測試,易維護的開發應用程序架構。基於MVC的應用程序包含:

Models:代表應用程序數據以及使用數據嚴重邏輯執行業務規則的類

Views:應用程序動態生成Html響應的模板文件

Controllers:處理瀏覽器傳入請求,獲取Model的數據,執行視圖模板、然後將它們響應到瀏覽器的類

在這一系列的文章中我們將涵蓋這些概念,並向引導你們如何使用它們去創建一個應用程序。

下面我們將開始創建controller類,在Solution Explorer中右鍵controller文件夾然後點擊Add->Controller選項

wKiom1brTkHAWfMjAAC_XcTyeE8464.png

在彈出的Add Scaffold中選擇MVC5 Controller-Empty 點擊Add

wKiom1brTkOhCZ8vAAC0U1AVVFE595.png

輸入新控制器的名字爲“HellowWorldController”,然後點擊添加

wKioL1brTtPAMd-MAAAsO1Qszy8093.png

如果注意查看,你會發現在側邊欄SolutionExplorer中會有一個名爲HelloWorldController.cs文件和Views\HelloWorld文件夾,HelloWorld.cs文件也會在IDE中打開。

wKiom1brTkSQMgU-AAEd8jUvxTk212.png

用下面代碼替換文件夾中的內容:

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方法中,代碼直接返回了一個字符串。這就相當於你告訴系統直接返回這個字符串到瀏覽器。

wKioL1brTtSjSb1WAAA_N_GFdPk849.png

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] 部分。wKioL1brTtSivFMVAABc1_XmMNk629.png

我們修改下上面的例子,讓我們可以通過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地址中輸入的查詢字符串映射到你指定的函數的參數中。

wKiom1brTkXywMISAABLhnYgm1k748.png

上面的例子中我們並沒有使用路由模板中的第三個參數/[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

wKiom1brTkXRfewfAABIwzWVecE605.png

這時路由模板的第三個參數與路由中的參數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

wKioL1brTtWSjz4iAAA-TrChPaI960.png

對大多數MVC應用程序來說,使用默認的路由模板就可以。在本文的後續中我們將講述使用“Model綁定”來傳遞從數據,所以你也不用修改默認路由。

在本文的例子中我們使用MVC中V和C,即View和Controller。Controller直接返回到HTML界面。通常你不想Controller直接返回到HTML界面,因爲這樣將代碼變得非常複雜。我們習慣於使用一個單獨的ViewTemplate文件去生成一個HTML響應。下一遍文章我們將講解如何實現它。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章