
- ASP.NET MVC 教程
- ASP.NET MVC - 首頁
- ASP.NET MVC - 概述
- ASP.NET MVC - 模式
- ASP.NET MVC - 環境設定
- ASP.NET MVC - 入門
- ASP.NET MVC - 生命週期
- ASP.NET MVC - 路由
- ASP.NET MVC - 控制器
- ASP.NET MVC - 操作
- ASP.NET MVC - 過濾器
- ASP.NET MVC - 選擇器
- ASP.NET MVC - 檢視
- ASP.NET MVC - 資料模型
- ASP.NET MVC - 輔助方法
- ASP.NET MVC - 模型繫結
- ASP.NET MVC - 資料庫
- ASP.NET MVC - 驗證
- ASP.NET MVC - 安全性
- ASP.NET MVC - 快取
- ASP.NET MVC - Razor
- ASP.NET MVC - 資料註解
- Nuget 包管理
- ASP.NET MVC - Web API
- ASP.NET MVC - 腳手架
- ASP.NET MVC - Bootstrap
- ASP.NET MVC - 單元測試
- ASP.NET MVC - 部署
- ASP.NET MVC - 自託管
- ASP.NET MVC 有用資源
- ASP.NET MVC - 快速指南
- ASP.NET MVC - 有用資源
- ASP.NET MVC - 討論
ASP.NET MVC - 控制器
控制器本質上是 ASP.NET MVC 應用程式的核心單元。它是第一個接收並處理傳入 HTTP 請求的元件。因此,控制器決定選擇哪個模型,然後它從模型中獲取資料並將其傳遞給相應的檢視,之後檢視被渲染。實際上,控制器透過獲取輸入並呈現正確的輸出來控制應用程式的整體流程。
控制器是繼承自 System.Web.Mvc.Controller 的 C# 類,後者是內建的控制器基類。控制器中的每個公共方法都稱為操作方法,這意味著您可以透過某些 URL 從 Web 呼叫它來執行操作。
MVC 的約定是將控制器放在 Visual Studio 在專案設定時建立的 Controllers 資料夾中。
讓我們透過建立一個新的 ASP.Net MVC 專案來檢視一個簡單的控制器示例。
步驟 1 - 開啟 Visual Studio 並點選檔案 → 新建 → 專案選單選項。
將開啟一個新的專案對話方塊。

步驟 2 - 從左側窗格中選擇模板 → Visual C# → Web。
步驟 3 - 在中間窗格中,選擇 ASP.NET Web 應用程式。
步驟 4 - 在名稱欄位中輸入專案名稱“MVCControllerDemo”,然後點選確定繼續。您將看到以下對話方塊,提示您設定 ASP.NET 專案的初始內容。

步驟 5 - 為簡單起見,選擇“空”選項,並在“新增資料夾和核心引用”部分選中 MVC 複選框,然後點選確定。
它將建立一個具有最少預定義內容的基本 MVC 專案。
Visual Studio 建立專案後,您將在解決方案資源管理器視窗中看到許多檔案和資料夾。
由於我們是從空專案模板建立的 ASP.Net MVC 專案,因此目前應用程式不包含任何可執行的內容。
步驟 6 - 透過右鍵單擊解決方案資源管理器中的 Controllers 資料夾新增 EmployeeController。選擇新增 → 控制器。

它將顯示“新增腳手架”對話方塊。

步驟 7 - 選擇 MVC 5 控制器 - 空選項,然後點選“新增”按鈕。
將出現“新增控制器”對話方塊。

步驟 8 - 將名稱設定為 EmployeeController,然後點選“新增”按鈕。
您將在 Controllers 資料夾中看到一個新的 C# 檔案 EmployeeController.cs,它也在 Visual Studio 中開啟以供編輯。

現在,在這個應用程式中,我們將為 Employee 控制器新增一個自定義路由,並使用預設路由。
步驟 1 - 轉到“App_Start”資料夾下的“RouteConfig.cs”檔案,並新增以下路由。
routes.MapRoute( "Employee", "Employee/{name}", new{ controller = "Employee", action = "Search", name = UrlParameter.Optional });
以下是 RouteConfig.cs 檔案的完整實現。
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.Web.Routing; namespace MVCControllerDemo { public class RouteConfig { public static void RegisterRoutes(RouteCollection routes){ routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( "Employee", "Employee/{name}", new{ controller = "Employee", action = "Search", name = UrlParameter.Optional }); routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new{ controller = "Home", action = "Index", id = UrlParameter.Optional }); } } }
考慮這樣一種情況:任何使用者來搜尋員工,並指定 URL“Employee/Mark”。在這種情況下,Mark 將被視為引數名稱,而不是操作方法。因此,在這種情況下,我們的預設路由將無法正常工作。
為了在傳遞引數時從瀏覽器獲取傳入的值,MVC 框架提供了一種簡單的方法來解決此問題。即在操作方法中使用引數。
步驟 2 - 使用以下程式碼更改 EmployeeController 類。
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace MVCControllerDemo.Controllers { public class EmployeeController : Controller { // GET: Employee public ActionResult Search(string name){ var input = Server.HtmlEncode(name); return Content(input); } } }
如果向操作方法新增引數,則 MVC 框架將查詢與引數名稱匹配的值。它將應用所有可能的組合來找出引數值。它將在路由資料、查詢字串等中搜索。
因此,如果您請求“/Employee/Mark”,則 MVC 框架將確定我需要一個名為“UserInput”的引數,然後將從 URL 中選擇 Mark,並自動傳遞。
Server.HtmlEncode 將簡單地將任何型別的惡意指令碼轉換為純文字。當編譯並執行上述程式碼並請求以下 URL https://:61465/Employee/Mark 時,您將獲得以下輸出。

如您在上面的螢幕截圖中看到的,Mark 是從 URL 中獲取的。