鍍金池/ 教程/ C#/ ASP.Net MVC控制器
ASP.Net MVC簡介
ASP.Net MVC過濾器
ASP.Net MVC視圖
ASP.Net MVC安全
ASP.Net MVC手腳架
ASP.Net MVC控制器
ASP.Net MVC與SQL Server數(shù)據(jù)庫操作
ASP.Net MVC NuGet包管理
ASP.Net MVC入門程序
ASP.Net MVC Razor
ASP.Net MVC Bootstrap
ASP.Net MVC單元測試
ASP.Net MVC動作
ASP.Net MVC模式
ASP.Net MVC選擇器
ASP.Net MVC開發(fā)環(huán)境配置
ASP.Net MVC生命周期
ASP.Net MVC模型綁定
ASP.Net MVC自托管(本地主機部署)
ASP.Net MVC驗證
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)用程序的中心單元。 它是第一個請求接收者,與傳入的HTTP請求進行交互。 因此,控制器決定選擇哪個模型,然后從模型中獲取數(shù)據(jù),并將其傳遞給相應(yīng)的視圖,然后渲染視圖。 實際上,控制器正在控制應(yīng)用程序的整體流程,并輸出正確的輸出。

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

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

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

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

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

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

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

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

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

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

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

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

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

自定義路由規(guī)則

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

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

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

以下是RouteConfig.cs 文件的完整實現(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 });
      }
   }
}

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

當(dāng)參數(shù)傳遞時,要從瀏覽器獲取傳入值,MVC框架提供了一個簡單的方法來解決這個問題。它是通過使用操作方法內(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);
        }
    }
}

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

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

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

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