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