ASP.Net MVC動作

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

例如,在瀏覽器中輸入一個URL,點擊任何特定的鏈接,提交表單等。這些用戶交互中的每一個都會導致請求被髮送到服務器。 在每種情況下,請求的URL都包含MVC框架用來調用操作方法的信息。動作方法的一個限制是它們必須是實例方法,所以它們不能是靜態方法。也沒有返回值的限制。 所以可以返回字符串,整數等。

請求處理

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

  • 當URL到達時,如/Home/index,這是一個UrlRoutingModule,它檢查並理解路由表中配置的內容並知道如何處理該URL。
    ASP.Net MVC動作

  • 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 時,將收到操作的輸出如下 -
ASP.Net MVC動作

添加控制器

現在,在項目上再添加另一個控制器。

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

它將顯示「添加基架」 對話框。如下所示 -
ASP.Net MVC動作

第2步 - 選擇MVC 5控制器 - 空 選項,然後單擊「添加」 按鈕。添加控制器對話框將出現。
第3步 - 將名稱設置爲:CustomerController ,然後單擊「添加」 按鈕。

現在,已經在Controllers文件夾中看到一個新的 C# 文件「CustomerController.cs」 ,在Visual Studio中打開並進行編輯,如下所示 -
ASP.Net MVC動作

同樣,再添加一個名爲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步 - 運行此應用程序,將收到以下輸出 -

ASP.Net MVC動作

第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 ,將看到以下輸出 -
ASP.Net MVC動作

也可以重定向到同一控制器的操作,甚至是不同的控制器。以下是一個簡單的例子,將通過使用以下代碼更改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
ASP.Net MVC動作