ASP.NET MVC 5 學習教程:添加控制器


起飛網 ASP.NET MVC 5 學習教程目錄:

MVC代表了模型-視圖-控制器。MVC是一個架構良好,可測試性和易於維護的應用程序開發模式。基於MVC模式的應用程序包含:

  • 模型:模型類代表了應用程序中的數據,為強制執行業務規則使用了數據邏輯驗證。
  • 視圖:應用程序中的視圖模板文件用來動態生成HTML響應。
  • 控制器:控制器類處理傳入的瀏覽器請求,獲取模型數據,然后指定視圖模板,將響應返回給瀏覽器。

我們將在本教程系列涵蓋了所有這些概念,並告訴你如何使用它們來構建應用程序。

首先,讓我們創建一個控制器類。在“解決方案資源管理器”中,右鍵“Controllers”文件夾,然后選擇“添加”>“支架”:

圖1:添加控制器的菜單

添加控制器的菜單

在添加支架對話框中,選擇“MVC 5 Controller - Empty”,然后單擊“添加”按鈕:

圖2:添加支架對話框

添加支架對話框

在Controller Name中輸入“HelloWorldController”,單擊“Add”按鈕:

圖3:添加控制器對話框

添加控制器對話框

此時在“解決方法資源管理器”中已經新建了文件 HelloWorldController.cs。該文件在IDE中是打開的。

圖4:HelloWorldController.cs

HelloWorldController.cs

使用以下代碼替換文件內容:

代碼清單1:HelloWorldController.cs

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”(例如,在下面的圖5中,地址欄內容為localhost:2264/HelloWorld)。瀏覽器中的頁面效果如圖5:

圖5:瀏覽器中查看 HelloWorld

瀏覽器中查看 HelloWorld

ASP.NET MVC 根據傳入的URL調用不同的控制器(還有不同的操作方法),ASP.NET MVC 默認的路由規則決定了調用那些代碼:

/[Controller]/[ActionName]/[Parameters]

你可以在 App_Start/RouteConfig.cs 文件中設置路由格式。

代碼清單2:默認路由代碼

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 }
    );
}

在代碼清單2中,當你運行程序,且不提供任何URL片段的時候,默認調用 Home 控制器的 Index 方法。

URL第一部分決定了要調用的控制器,/HelloWorld 對應的是 HelloWorldController 類。第二部分決定了被調用的Action方法,因此 /HelloWorld/Index 引發調用了HelloWorldController 類的Index 方法。雖然我們瀏覽的地址是/HelloWorld,但是Index方法是默認的Action,所以Index方法會被調用。URL的第三部分是數據部分,我們將在后面的章節中介紹路由數據。

瀏覽地址: http://localhost:xxxx/HelloWorld/Welcome,Welcome方法被執行,返回字符串“This is the Welcome action method...”。MVC的默認映射是 /[Controller]/[ActionName]/[Parameters]。對於這個URL,控制器是HelloWorld,Welcome 是執行的方法。我們還沒有在地址中使用[Parameters]部分。

圖6:瀏覽器中查看Welcome

  image

讓我們稍微修改一下例子,使你能夠從URL中傳遞參數給控制器(例如,/HelloWorld/Welcome?name=Scott&numtimes=4)。修改Welcome方法,讓它包含兩個參數。請注意,該代碼使用C#的可選參數功能,表明的numTimes參數如果參數傳遞,那么默認為1。修改后的代碼如下:

代碼清單3:修改后的Welcome方法

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)。你可以在URL中為namenumtimes試試不同的值,ASP.NET MVC 模型綁定系統自動將地址中命名的查詢參數映射為方法中的參數。

圖7:瀏覽器中查看帶參數的Welcome

image

在上面的例子中,URL的參數部分沒有用到,參數 namenumTimes 是作為查詢字符串傳遞的。

使用下面的代碼替換Welcome方法:

代碼清單4:Welcome方法代碼

public string Welcome(string name, int ID = 1)
{
    return HttpUtility.HtmlEncode("Hello " + name + ", ID: " + ID);
}

運行程序,並瀏覽下面的地址: http://localhost:xxx/HelloWorld/Welcome/3?name=Rick

圖8:使用了參數部分的Welcome

image

這次的URL第三部分匹配了參數 ID,因為Welcome 方法中有一個參數ID,這個URL正好與RegisterRoutes中的規范匹配。此處可以參見代碼清單2中的默認路由規則。

在ASP.NET MVC 應用程序中,像我們使用路由數據傳遞參數,比用查詢字符串傳遞參數更為典型。你還可以定一個路由,通過路由數據使用URL同時傳遞name和numTimes兩個參數。在App_Start\RouteConfig.cs  文件中,添加一個名為“Hello”的路由:

代碼清單5:添加Hello路由

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}"
   );
}

在瀏覽器中查看地址 localhost:XXX/HelloWorld/Welcome/Scott/3:

圖9:同時傳遞兩個參數

image

在大多數MVC應用程序中,默認的路由都可以很好的工作。你會在本教程的后續章節中學習通過模型綁定傳遞參數,並且你不用修改默認的路由。

在這些例子中,控制器做了MVC中“VC”部分的工作,這說明視圖和控制器工作了。控制器直接返回了HTML。通常我們不想控制器直接返回HTML,因為代碼變得非常麻煩。相反,我們通常會使用一個單獨的視圖模板​​文件來幫助生成HTML響應。我們會在后面的章節中介紹這些內容。

 

本文轉自起飛網,原文地址:http://www.qeefee.com/mvc/mvc-5-adding-a-controller


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM