ASP.Net MVC動作


ASP.NET MVC操作方法負責執行請求並生成響應。預設情況下,它以ActionResult的形式生成響應。操作通常具有與使用者互動的一對一對映。

例如,在瀏覽器中輸入一個URL,點選任何特定的連結,提交表單等。這些使用者互動中的每一個都會導致請求被傳送到伺服器。 在每種情況下,請求的URL都包含MVC框架用來呼叫操作方法的資訊。動作方法的一個限制是它們必須是範例方法,所以它們不能是靜態方法。也沒有返回值的限制。 所以可以返回字串,整數等。

請求處理

動作是MVC應用程式中的最終請求目標,它使用控制器基礎類別。我們來看看請求處理。

  • 當URL到達時,如/Home/index,這是一個UrlRoutingModule,它檢查並理解路由表中組態的內容並知道如何處理該URL。

  • UrlRoutingModule將在路由表中組態的資訊放在一起,並將控制交給MVC路由處理程式。

  • MVC路由處理程式將控制器傳遞給作為HTTP處理程式的MvcHandler
  • MvcHandler使用一個控制器工廠範例化控制器,它知道範例化哪個控制器,因為它在該控制器值的RouteData中查詢。
  • MvcHandler有一個控制器,MvcHandler唯一知道的就是IController介面,所以它只是告訴控制器執行。
  • 當它告訴控制器執行時,這是從MVC的控制器基礎類別派生的。 Execute方法建立一個動作呼叫者,並告訴動作呼叫者去找到一個方法來呼叫,找到一個呼叫的動作。
  • 動作呼叫者再次在RouteData中查詢並找到從路由引擎傳遞的動作引數。

動作型別

動作基本上返回不同型別的動作結果。ActionResult類是所有操作結果的基礎。 以下是不同種類的行為結果及其行為的列表。

編號 名稱 行為
1 ContentResult 返回一個字串
2 FileContentResult 返回檔案內容
3 FilePathResult 返回檔案內容
4 FileStreamResult 返回檔案內容
5 EmptyResult 什麼都不返回
6 JavaScriptResult 返回指令碼執行
7 JsonResult 返回JSON格式的資料
8 RedirectToResult 重定向到指定的網址
9 HttpUnauthorizedResult 返回403 HTTP狀態碼
10 RedirectToRouteResult 重定向到不同的動作/不同的控制器動作
11 ViewResult 作為檢視引擎的響應收到
12 PartialViewResult 作為檢視引擎的響應收到

我們來看看前一章(ASP.Net MVC控制元件器MVCControllerDemo專案)中建立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);
      }
   }
}

當請求以下URL:http://localhost:51066/Employee/Maxsu 時,將收到操作的輸出如下 -

新增控制器

現在,在專案上再新增另一個控制器。

第1步 - 通過在解決方案資源管理器 中右鍵單擊 Controllers 檔案夾來新增一個:控制器:CustomerController。選擇:新增 -> 控制器 。如下所示 -

它將顯示「新增基架」 對話方塊。如下所示 -

第2步 - 選擇MVC 5控制器 - 空 選項,然後單擊「新增」 按鈕。新增控制器對話方塊將出現。
第3步 - 將名稱設定為:CustomerController ,然後單擊「新增」 按鈕。

現在,已經在Controllers檔案夾中看到一個新的 C# 檔案「CustomerController.cs」 ,在Visual Studio中開啟並進行編輯,如下所示 -

同樣,再新增一個名為HomeController的控制器。 以下是HomeController.cs類的實現。參考程式碼 -

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

namespace MVCControllerDemo.Controllers
{
    public class HomeController : Controller
    {
        // GET: Home
        public string Index()
        {
            return "This is Home MVCControllerDemo.HomeController.Index() Action.";
        }
    }
}

第4步 - 執行此應用程式,將收到以下輸出 -

第5步 - 在上面建立的CustomerController.cs類中新增一個方法,如以下程式碼 -

public string GetAllCustomers(){
   return @"<ul>
      <li>Max Su</li>
      <li>Mark Jasper</li>
      <li>Allan Java</li>
      <li>Ruby Jerry</li>
   </ul>";
}

第6步 - 執行該應用程式並請求URL: http://localhost:51066/Customer/GetAllCustomers ,將看到以下輸出 -

也可以重定向到同一控制器的操作,甚至是不同的控制器。以下是一個簡單的例子,將通過使用以下程式碼更改HomeController中的程式碼,從HomeController重定向到CustomerController

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

namespace MVCControllerDemo.Controllers
{
    public class HomeController : Controller
    {
        // GET: Home
        public ActionResult Index()
        {
            return RedirectToAction("GetAllCustomers", "Customer");
        }
    }
}

上面程式碼中,使用了RedirectToAction()方法,它有兩個引數:操作名稱和控制器名稱。

當執行這個應用程式時,會看到預設路由將重定向到/Customer/GetAllCustomers