鍍金池/ 教程/ C#/ ASP.Net MVC動(dòng)作
ASP.Net MVC簡介
ASP.Net MVC過濾器
ASP.Net MVC視圖
ASP.Net MVC安全
ASP.Net MVC手腳架
ASP.Net MVC控制器
ASP.Net MVC與SQL Server數(shù)據(jù)庫操作
ASP.Net MVC NuGet包管理
ASP.Net MVC入門程序
ASP.Net MVC Razor
ASP.Net MVC Bootstrap
ASP.Net MVC單元測試
ASP.Net MVC動(dòng)作
ASP.Net MVC模式
ASP.Net MVC選擇器
ASP.Net MVC開發(fā)環(huán)境配置
ASP.Net MVC生命周期
ASP.Net MVC模型綁定
ASP.Net MVC自托管(本地主機(jī)部署)
ASP.Net MVC驗(yàn)證
ASP.Net MVC緩存
ASP.Net MVC數(shù)據(jù)模型
ASP.Net MVC路由
ASP.Net MVC教程
ASP.Net MVC助手
ASP.Net MVC數(shù)據(jù)注解
ASP.Net MVC Web API

ASP.Net MVC動(dòng)作

ASP.NET MVC操作方法負(fù)責(zé)執(zhí)行請求并生成響應(yīng)。默認(rèn)情況下,它以ActionResult的形式生成響應(yīng)。操作通常具有與用戶交互的一對(duì)一映射。

例如,在瀏覽器中輸入一個(gè)URL,點(diǎn)擊任何特定的鏈接,提交表單等。這些用戶交互中的每一個(gè)都會(huì)導(dǎo)致請求被發(fā)送到服務(wù)器。 在每種情況下,請求的URL都包含MVC框架用來調(diào)用操作方法的信息。動(dòng)作方法的一個(gè)限制是它們必須是實(shí)例方法,所以它們不能是靜態(tài)方法。也沒有返回值的限制。 所以可以返回字符串,整數(shù)等。

請求處理

動(dòng)作是MVC應(yīng)用程序中的最終請求目標(biāo),它使用控制器基類。我們來看看請求處理。

  • 當(dāng)URL到達(dá)時(shí),如/Home/index,這是一個(gè)UrlRoutingModule,它檢查并理解路由表中配置的內(nèi)容并知道如何處理該URL。

  • UrlRoutingModule將在路由表中配置的信息放在一起,并將控制交給MVC路由處理程序。

  • MVC路由處理程序?qū)⒖刂破鱾鬟f給作為HTTP處理程序的MvcHandler。
  • MvcHandler使用一個(gè)控制器工廠實(shí)例化控制器,它知道實(shí)例化哪個(gè)控制器,因?yàn)樗谠摽刂破髦档?code>RouteData中查找。
  • 當(dāng)MvcHandler有一個(gè)控制器,MvcHandler唯一知道的就是IController接口,所以它只是告訴控制器執(zhí)行。
  • 當(dāng)它告訴控制器執(zhí)行時(shí),這是從MVC的控制器基類派生的。 Execute方法創(chuàng)建一個(gè)動(dòng)作調(diào)用者,并告訴動(dòng)作調(diào)用者去找到一個(gè)方法來調(diào)用,找到一個(gè)調(diào)用的動(dòng)作。
  • 動(dòng)作調(diào)用者再次在RouteData中查找并找到從路由引擎?zhèn)鬟f的動(dòng)作參數(shù)。

動(dòng)作類型

動(dòng)作基本上返回不同類型的動(dòng)作結(jié)果。ActionResult類是所有操作結(jié)果的基礎(chǔ)。 以下是不同種類的行為結(jié)果及其行為的列表。

編號(hào) 名稱 行為
1 ContentResult 返回一個(gè)字符串
2 FileContentResult 返回文件內(nèi)容
3 FilePathResult 返回文件內(nèi)容
4 FileStreamResult 返回文件內(nèi)容
5 EmptyResult 什么都不返回
6 JavaScriptResult 返回腳本執(zhí)行
7 JsonResult 返回JSON格式的數(shù)據(jù)
8 RedirectToResult 重定向到指定的網(wǎng)址
9 HttpUnauthorizedResult 返回403 HTTP狀態(tài)碼
10 RedirectToRouteResult 重定向到不同的動(dòng)作/不同的控制器動(dòng)作
11 ViewResult 作為視圖引擎的響應(yīng)收到
12 PartialViewResult 作為視圖引擎的響應(yīng)收到

我們來看看前一章(ASP.Net MVC控件器MVCControllerDemo項(xiàng)目)中創(chuàng)建EmployeeController的一個(gè)簡單示例。參考以下示例代碼 -

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);
      }
   }
}

當(dāng)請求以下URL:http://localhost:51066/Employee/Maxsu 時(shí),將收到操作的輸出如下 -

添加控制器

現(xiàn)在,在項(xiàng)目上再添加另一個(gè)控制器。

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

它將顯示“添加基架” 對(duì)話框。如下所示 -

第2步 - 選擇MVC 5控制器 - 空 選項(xiàng),然后單擊“添加” 按鈕。添加控制器對(duì)話框?qū)⒊霈F(xiàn)。
第3步 - 將名稱設(shè)置為:CustomerController ,然后單擊“添加” 按鈕。

現(xiàn)在,已經(jīng)在Controllers文件夾中看到一個(gè)新的 C# 文件“CustomerController.cs” ,在Visual Studio中打開并進(jìn)行編輯,如下所示 -

同樣,再添加一個(gè)名為HomeController的控制器。 以下是HomeController.cs類的實(shí)現(xiàn)。參考代碼 -

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步 - 運(yùn)行此應(yīng)用程序,將收到以下輸出 -

第5步 - 在上面創(chuàng)建的CustomerController.cs類中添加一個(gè)方法,如以下代碼 -

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

第6步 - 運(yùn)行該應(yīng)用程序并請求URL: http://localhost:51066/Customer/GetAllCustomers ,將看到以下輸出 -

也可以重定向到同一控制器的操作,甚至是不同的控制器。以下是一個(gè)簡單的例子,將通過使用以下代碼更改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()方法,它有兩個(gè)參數(shù):操作名稱和控制器名稱。

當(dāng)運(yùn)行這個(gè)應(yīng)用程序時(shí),會(huì)看到默認(rèn)路由將重定向到/Customer/GetAllCustomers