[ASP.NET MVC] 新增Controller

[ASP.NET MVC] 新增一個 ASP.NET MVC 的 Controller

 

新增Controller

在上一篇建立專案後,接下來要建立一個控制器。在方案總管的Controller資料夾按下右鍵,然後選擇加入>控制器。

在加入控制器後的新增視窗中,選擇MVC 5 控制器 - 空白,然後按下新增。

新增HelloWorldController的控制器,然後按下加入。

新增後可以看到,Controller資料夾裡有了HelloWorld的Controller的檔案,在Views底下也已經新增了一個HelloWorld的資料夾。

將HellowWorld的Controller內容改寫。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace MyMVC.Controllers
{
    public class HelloWorldController : Controller
    {
        // GET: HelloWorld
        public string Index()
        {
            return "這是預設Action";
        }

        public string Welcome()
        {
            return "這是Welcome的Action";
        }

    }
}

Controller的兩個Action方法;IndexWelocme會分別傳回字串給View顯示。按下F5或是Ctrl+F5執行應用程式,將網址列加入HelloWorld ( http://localhost:xxxx/HelloWorld 

ASP.NET MVC 會依照輸入的網址去呼叫不同的Controller,ASP.NET MVC預設的URL routing為 /[Controller]/[ActionName]/[Parameters]

可以在 App_Start/RouteConfig.cs 的檔案裡面設定routing

在上面的程式中可以看到預設會呼叫Home的Controller中IndexAction方法。

網址列的第一部分決定使用的Controller/HelloWorld 對應HelloWorldController。

第二部分決定使用的Action方法, /HelloWorld/Index 便是使用HelloWorldController 的Index 方法。雖然上面的範例網址是/HelloWorld ,不過Index方法是預設的Action,所以仍然會呼叫Index 方法。

第三部分則是參數,後面將會介紹參數部分。

 

將網址列輸入 http://localhost:xxxx/HelloWorld/Welcome,會執行Welcome的Action方法,並傳回字串 "這是Welcome的Action" 。

依照網址的MVC預設配置 /[Controller]/[ActionName]/[Parameters] ,Controller是HelloWorld,Welcome是Action方法,而目前還沒有使用到參數部分。

現在修改一下Welcome方法,讓網址列中傳遞參數給Controller(例如/HelloWorld/Welcome?name=Berry&age=20)。修改Welcome方法,加入兩個參數nameage,修改後如下。

public string Welcome(string name,int age=18)
{
   return HttpUtility.HtmlEncode("你好" + name + ",年紀: " + age);
}

執行應用程式,輸入網址(http://localhost:xxxx/HelloWorld/Welcome?name=Berry&age=20)。可以在網址列將參數name跟age做修改成不同值,ASP.NET MVC 將會自動將網址列的參數配置為方法中的參數。

但是在上面的範例依然沒有使用到參數的部分,name跟age是在網址結尾加上一個問號(?)開始,每一組參數都是用「&」區隔開來的查詢字串。

將Welcome方法改寫成以下

public string Welcome(string name,int id=18)
{
    return HttpUtility.HtmlEncode("你好" + name + ", ID: " + id);
}

執行應用程式,輸入網址:http://localhost:xxx/HelloWorld/Welcome/100?name=Berry

這次的網址列中於 /[Controller]/[ActionName]/[Parameters] ,第三部分的參數中給了一個參數id,與RegisterRoutes的設定 url: "{controller}/{action}/{id}"  中的id匹配。

也可以在 App_Start\RouteConfig.cs 檔案裡,增加一個Hello的route,並擁有name與id的參數。

執行應用程式,輸入網址 http://localhost:XXX/HelloWorld/Welcome/Berry/99

在 ASP.NET MVC 裡,使用路由傳遞參數,比使用查詢字串來的更好,參數代號就不會很輕易的被看到,進而改寫。像是下圖兩張比較:

第一個使用查詢字串,可以很容易知道id與password分別代表那些參數,然後做修改。而第二個使用路由傳遞參數,網址列只看到/Berry/99,並不知道其分別代表哪些意義,因此更加保密。

 

下一篇  新增View

 

 END 

回目錄