ASP.NET MVC操作方法負責執行請求並生成響應。預設情況下,它以ActionResult
的形式生成響應。操作通常具有與使用者互動的一對一對映。
例如,在瀏覽器中輸入一個URL,點選任何特定的連結,提交表單等。這些使用者互動中的每一個都會導致請求被傳送到伺服器。 在每種情況下,請求的URL都包含MVC框架用來呼叫操作方法的資訊。動作方法的一個限制是它們必須是範例方法,所以它們不能是靜態方法。也沒有返回值的限制。 所以可以返回字串,整數等。
動作是MVC應用程式中的最終請求目標,它使用控制器基礎類別。我們來看看請求處理。
當URL到達時,如/Home/index
,這是一個UrlRoutingModule
,它檢查並理解路由表中組態的內容並知道如何處理該URL。
UrlRoutingModule
將在路由表中組態的資訊放在一起,並將控制交給MVC路由處理程式。
MvcHandler
。MvcHandler
使用一個控制器工廠範例化控制器,它知道範例化哪個控制器,因為它在該控制器值的RouteData
中查詢。MvcHandler
有一個控制器,MvcHandler
唯一知道的就是IController
介面,所以它只是告訴控制器執行。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