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中開啟並進行編輯。預設程式碼如下所示 -

自定義路由規則

現在,在這個應用程式中,我們將使用預設路由為EmployeeController控制器,這需要新增一個自定義的路由。請參考以下步驟實現 -

第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/Maxsu。 在這種情況下,Maxsu將被視為引數名稱,而不是操作的方法。所以在這種情況下,預設路由將不會工作顯示。

當引數傳遞時,要從瀏覽器獲取傳入值,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/Maxsu,那麼MVC框架將決定需要一個帶有UserInput的引數,然後Maxsu會從URL中挑選出來並自動傳遞。

Server.HtmlEncode將簡單地轉換任何形式的純文字惡意指令碼。當上面的程式碼被編譯並執行並請求以下URL:http://localhost:51066/Employee/Maxsu時,將得到以下輸出。參考下圖所示 -

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