鍍金池/ 教程/ C#/ ASP.Net MVC控制器
ASP.Net MVC簡(jiǎn)介
ASP.Net MVC過濾器
ASP.Net MVC視圖
ASP.Net MVC安全
ASP.Net MVC手腳架
ASP.Net MVC控制器
ASP.Net MVC與SQL Server數(shù)據(jù)庫(kù)操作
ASP.Net MVC NuGet包管理
ASP.Net MVC入門程序
ASP.Net MVC Razor
ASP.Net MVC Bootstrap
ASP.Net MVC單元測(cè)試
ASP.Net MVC動(dòng)作
ASP.Net MVC模式
ASP.Net MVC選擇器
ASP.Net MVC開發(fā)環(huán)境配置
ASP.Net MVC生命周期
ASP.Net MVC模型綁定
ASP.Net MVC自托管(本地主機(jī)部署)
ASP.Net MVC驗(yàn)證
ASP.Net MVC緩存
ASP.Net MVC數(shù)據(jù)模型
ASP.Net MVC路由
ASP.Net MVC教程
ASP.Net MVC助手
ASP.Net MVC數(shù)據(jù)注解
ASP.Net MVC Web API

ASP.Net MVC控制器

控制器本質(zhì)上是ASP.NET MVC應(yīng)用程序的中心單元。 它是第一個(gè)請(qǐng)求接收者,與傳入的HTTP請(qǐng)求進(jìn)行交互。 因此,控制器決定選擇哪個(gè)模型,然后從模型中獲取數(shù)據(jù),并將其傳遞給相應(yīng)的視圖,然后渲染視圖。 實(shí)際上,控制器正在控制應(yīng)用程序的整體流程,并輸出正確的輸出。

控制器是繼承自System.Web.Mvc.Controller的 C# 類,它是內(nèi)置的控制器基類。 控制器中的每個(gè)公共方法都稱為一個(gè)操作方法,這意味著您可以通過某個(gè)URL從Web調(diào)用它來執(zhí)行操作。

MVC約定是將控制器放置在Visual Studio 在項(xiàng)目設(shè)置時(shí)創(chuàng)建的文件夾(Controllers)中。

我們來看一個(gè)簡(jiǎn)單的控制器例子,通過創(chuàng)建一個(gè)新的ASP.Net MVC項(xiàng)目。

第1步 - 打開Visual Studio,然后單擊菜單:文件 -> 新建 -> 項(xiàng)目 選項(xiàng)。一個(gè)新的項(xiàng)目對(duì)話框打開。
第2步 - 在左側(cè)窗格中,選擇模板:Visual C# -> Web 。
第3步 - 在中間窗格中,選擇“ASP.NET Web應(yīng)用程序” 。如下圖所示 -

第4步 - 在名稱字段中輸入項(xiàng)目名稱:MVCControllerDemo,然后單擊確定 繼續(xù)。 您將看到以下對(duì)話框,要求為ASP.NET項(xiàng)目設(shè)置初始內(nèi)容。

第5步 - 為了簡(jiǎn)單起見,選擇 選項(xiàng),并在“為以下項(xiàng)添加文件夾和核心引用”部分選中MVC復(fù)選框,然后單擊【確定】。

它將使用最少的預(yù)定義內(nèi)容創(chuàng)建一個(gè)基本的MVC項(xiàng)目。

當(dāng)Visual Studio項(xiàng)目創(chuàng)建以后,在“解決方案資源管理器” 窗口中看到許多文件和文件夾。

由于這里從一個(gè)空的項(xiàng)目模板中創(chuàng)建了ASP.Net MVC項(xiàng)目,因此目前應(yīng)用程序不包含任何要運(yùn)行的東西。

第6步 - 通過在解決方案資源管理器 中右鍵單擊 Controllers 文件夾來添加一個(gè):EmployeeController。選擇:添加 -> 控制器 。如下所示 -

它將顯示“添加基架” 對(duì)話框。如下所示 -

第7步 - 選擇MVC 5控制器 - 空 選項(xiàng),然后單擊“添加” 按鈕。添加控制器對(duì)話框?qū)⒊霈F(xiàn)。
第8步 - 將名稱設(shè)置為:EmployeeController ,然后單擊“添加” 按鈕。如下所示 -

Controllers 文件夾中看到一個(gè)新的 C# 文件 - EmployeeController.cs,在Visual Studio中打開并進(jìn)行編輯。默認(rèn)代碼如下所示 -

自定義路由規(guī)則

現(xiàn)在,在這個(gè)應(yīng)用程序中,我們將使用默認(rèn)路由為EmployeeController控制器,這需要添加一個(gè)自定義的路由。請(qǐng)參考以下步驟實(shí)現(xiàn) -

第1步 - 轉(zhuǎn)到“App_Start”文件夾下的 RouteConfig.cs 文件,并添加以下路由。

routes.MapRoute(
   "Employee", "Employee/{name}", new{
      controller = "Employee", action = "Search", name =
      UrlParameter.Optional });

以下是RouteConfig.cs 文件的完整實(shí)現(xiàn)。參考以下代碼 -

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

考慮一個(gè)場(chǎng)景,其中任何用戶來到并搜索雇員,指定URL為Employee/Maxsu。 在這種情況下,Maxsu將被視為參數(shù)名稱,而不是操作的方法。所以在這種情況下,默認(rèn)路由將不會(huì)工作顯示。

當(dāng)參數(shù)傳遞時(shí),要從瀏覽器獲取傳入值,MVC框架提供了一個(gè)簡(jiǎn)單的方法來解決這個(gè)問題。它是通過使用操作方法內(nèi)部的參數(shù)。

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

如果將一個(gè)參數(shù)添加到操作方法中,則MVC框架將查找與參數(shù)名稱匹配的值。它將應(yīng)用所有可能的組合來找出參數(shù)值。它將搜索路由數(shù)據(jù),查詢字符串等

因此,如果請(qǐng)求:/Employee/Maxsu,那么MVC框架將決定需要一個(gè)帶有UserInput的參數(shù),然后Maxsu會(huì)從URL中挑選出來并自動(dòng)傳遞。

Server.HtmlEncode將簡(jiǎn)單地轉(zhuǎn)換任何形式的純文本惡意腳本。當(dāng)上面的代碼被編譯并執(zhí)行并請(qǐng)求以下URL:http://localhost:51066/Employee/Maxsu時(shí),將得到以下輸出。參考下圖所示 -

正如你在上面的屏幕截圖中看到的,Maxsu是從URL中選取的。