ASP.NET MVC 4.0 学习4-ActionResult

一,Controller簡介

Controller擔任了資料傳遞的角色,負責流程控制,決定存取哪個Model以及決定顯示哪個View頁面,即ASP.NET MVC中有關於『傳遞』的任務皆由Controller負責。

Controller的執行階段負責呼叫執行Model中的資料處理,並把處理結果數據傳送到對應的View。

Controller即為一個Class類,類中包含很多Method方法,方法中進行流程處理。

Controller有以下特點:

  • 類必須是Public公開類
  • 類名稱必須以Controller結尾
  • 類必須繼承自ASP.NET MVC 的Controller類別
  • Controller中的Action方法必須是Public公開的

二,Controller執行過程

STEP1 接受請求

服務器接收到客戶端的請求

STEP2 執行路由

接收請求後,UrlRoutingModule組件逐一對比RouteTable裏面的Route後找到匹配的RouteData,進而根據路由數據決定對應的Controller和Action

STEP3 MVC請求處理程序

接著MVCRouteHandler處理器會建立MVCHandler傳送到RequestContext

STEP4 創建Controller

MVCHandler使用RequestContext來確認IcontrollerFactory,以用來建立Controller

STEP5 執行Controller

MVCHandler調用Controller出來執行

STEP6 調用Action

接著ControllerActionInvoker決定要取出Controller裏面的哪個Action

STEP7 執行Result

Action方法接受客戶端的輸入來得到結果,並根據回傳類型傳回結果

當Controller被MVCHandler選擇後,ActionInvoker根據路由參數選取對應的Action.

Ctrl+F5運行程序以後我們看到首頁:http://localhost:64570/

根據RouteConfig.cs中默認路由配置:

  routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );

http://localhost:64570/ 根據上面的的默認路由配置把默認值補充完整就是http://localhost:64570/Home/Index,運行結果我們看到了index首頁

、Action選擇器

3-1:名稱選取器

運行專案,默認的名稱選擇器選擇Action,會取得HomeController中的Index:

    public ActionResult Index()
        {
            ViewBag.Message = "修改此範本即可開始著手進行您的 ASP.NET MVC 應用程式。";

            return View();
        }

現在我們在Action方法上面加上新的ActionName,添加對應新的View,如下

//添加ActionName
        [ActionName("NewActionName")]
        public ActionResult Index()
        {
            ViewBag.Message = "修改此範本即可開始著手進行您的 ASP.NET MVC 應用程式。";

            return View();
        }

運行以後默認首頁會顯示無法找到此頁面http://localhost:64570/home/index

修改請求的Action地址為:http://localhost:64570/home/NewActionName  頁面正常顯示為我們剛才添加的View頁面:

3-2:方法選擇器

1,NonAction屬性

Asp.net MVC中會把Controller中所有公開方法視為Action,如果我們想在Controller中建立包括公開屬性的不作為Action用途方法,可以通過NonAction屬性標記該方法:

    [NonAction]
        public ActionResult Function()
        {
            ViewBag.Message = "修改此範本即可開始著手進行您的 ASP.NET MVC 應用程式。";

            return View();
        }

2,Http Action

Action 方法前加 Http Action屬性後,不同的Http請求(HttpPost,HttpGet,HttpHead,HttpPut...)就會跳轉到不同的Action方法。

例如:在Index前加上[HttpPost]後,只有post請求才會跳轉到此Action

     //[HttpPost]
        public ActionResult Index()
        {
            ViewBag.Message = "修改此範本即可開始著手進行您的 ASP.NET MVC 應用程式。";

            return View();
        }

3-3:ActionResult

ActionResult是Action執行以後回傳的數據類型,就相當於方法中返回值是Void或者String,ActionResult的各種返回類型如下:

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

using System.Text;
using System.IO;

namespace MvcApplication3.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            ViewBag.Message = "修改此範本即可開始著手進行您的 ASP.NET MVC 應用程式。";

            return View();
        }

        //添加ActionName
        //[ActionName("NewActionName")]
        //public ActionResult Index()
        //{
        //    ViewBag.Message = "修改此範本即可開始著手進行您的 ASP.NET MVC 應用程式。";

        //    return View();
        //}

        //添加ActionName
        //[NonAction]
        //public ActionResult Function()
        //{
        //    ViewBag.Message = "修改此範本即可開始著手進行您的 ASP.NET MVC 應用程式。";

        //    return View();
        //}

        //[HttpPost]
        //public ActionResult Index()
        //{
        //    ViewBag.Message = "修改此範本即可開始著手進行您的 ASP.NET MVC 應用程式。";

        //    return View();
        //}

        ////-------------------------------以下是Action方法的各种回传类型--------------------

        //1,ContextResult,回傳純文字文件
        //public ContentResult About()
        //{
        //
        //    return Content("这是ContentResult的回传内容");
        //}

        //2,EmptyResult 回傳null
        //public EmptyResult About()
        //{
        //    return null;
        //}

        //3,RedirectResult ,相當於Response.Redirect導向新的鏈接
        //public RedirectResult About()
        //{
        //    //根据网址URL进行导向,可以链接到外部的网页
        //    //return Redirect("~/Home/Index");
        //    return Redirect("http://www.baidu.com");
        //}

        //4,RedirectToRouteResult,根據路由進行導向
        //public RedirectToRouteResult About()
        //{
        //     只能導向一個專案下面的Controller Action
        //    return RedirectToAction("Index", "Home", null);
        //}

        //5, ViewResult 回傳一個檢視結果
        //public ViewResult About()
        //{
        //    //所載入的View可以進行母板頁面的選擇或者設置無模板頁面
        //    return View();
        //}

        //6,PartialViewResult 回傳部分檢視,不能加載模板頁面
        //public PartialViewResult About()
        //{
        //    return PartialView();
        //}

        //7,回傳一個未經授權的錯誤
        //public HttpUnauthorizedResult About()
        //{
        //    return new HttpUnauthorizedResult();

        //    //webConfig中配置了未經授權錯誤發生的時候,重新導向的Url,如下
        //    //  <authentication mode="Forms">
        //    //  <forms loginUrl="~/Account/Login" timeout="2880" />
        //    //</authentication>
        //}

        //8,HttpNotFoundResult
        //public HttpNotFoundResult About()
        //{
        //    return HttpNotFound("Page No Found");
        //}

        //9,JavaScriptResult,本質上是回傳文字內容,知識Response.ContentType被定義為application/x-javascript
        //public JavaScriptResult About()
        //{
        //    string js = "alert(\"這是JavaScriptResult回傳結果\")";
        //    return JavaScript(js);
        //}

        //10,JsonResult,ASP.NET MVC將Response.ContentType定義為application/json
        //    並通過JavaScriptSerializer把回傳的物件序列化成Json字串
        //public JsonResult About()
        //{
        //    var jsonContent = new {
        //    Id=1,
        //    Text="這是JsonResult內容"
        //    };
        //    return Json(jsonContent,JsonRequestBehavior.AllowGet);
        //}

        //11,FilePathResult,通過路徑傳送檔案到客戶端
        //public FilePathResult About()
        //{
        //    //Server的MapPath方法產生指定的檔案路徑
        //    var imagePath = Server.MapPath("../Images/example.jpg");
        //    //回傳檔案
        //    return File(imagePath, "image/jpeg");
        //}

        //12, FileContentResult , 回傳檔案內容,通過二進制的方式進行傳遞
        //  範例中,把字符串轉換成編碼資料,然後傳入File方法中進行回傳
        //public FileContentResult About()
        //{
        //    //使用Encoding把資料以UTF8編碼轉換
        //    byte[] data = Encoding.UTF8.GetBytes("FileContentResult範例");
        //    //File(byte[] 檔案資料,檔案類型,下載時檔案名稱)
        //    return File(data,"text/plain","example.txt");
        //}

        //13,FileStreamResult 回傳檔案內容,通過Stream的方式進行傳遞
        //  範例中,用Server的MapPath方法產生指定檔案的url,然後開啟檔案的FileStream傳入File方法中進行回傳
        //public FileStreamResult About()
        //{
        //    //獲取檔案路徑
        //    var path = Server.MapPath("../Images/example.txt");
        //    //使用FileStream開啟檔案
        //    var fileStream = new FileStream(path, FileMode.Open);
        //    //File方法回傳
        //    return File(fileStream,"text/plain","example.txt");
        //}

        //14,ActionResult,上述所有的類別都直接或間接繼承自ActionResult,所以上述方法都可以用在ActionResult上
        //所以ActionResult回傳結果比較廣泛
        //public ActionResult About()
        //{
        //    if (new Random().Next()%2==0)
        //    {
        //        //回傳ViewResult
        //        return View();
        //    }
        //    else
        //    {
        //        //回傳JsonResult
        //        return Json(null,JsonRequestBehavior.AllowGet);
        //    }
        //}

        public ActionResult Contact()
        {
            ViewBag.Message = "您的連絡頁面。";

            return View();
        }
    }
}
时间: 2024-11-05 22:50:32

ASP.NET MVC 4.0 学习4-ActionResult的相关文章

ASP.NET MVC 4.0 学习2-留言板實現

新增專案實現留言板功能,瞭解MVC的運行機制 1,新增專案   2,添加數據庫文件message.mdf   Ctrl+W,L 打開資料庫連接,添加存放留言的Atricle表 添加字段,後點擊"更新"後看到新增的Atricle表(Content 應該設置為text) 3,添加ADO.NET實體數據模型 (MVC通過實體數據模型對數據庫中的數據進行增删改查)              ADO.NET實體數據模型添加完成. 4,建立Service 我們把對Model中message.mdf

ASP.NET MVC 4.0 学习6-Model Binding

一,ViewData,ViewBag與TempData ASP.NET MVC架構中,通過繼承在Controller中的ViewData,ViewBag和TempData和View頁面進行資料的存取,並且適合於少量的資料傳遞. 1.1  ViewBag ViewBag可以產生動態屬性,我們新建項目中看到ViewBag的使用方法: Controller中賦值:ViewBag.Title=”首頁”  View中獲取值 @ViewBag.Title 1.2  ViewData Controller中賦

ASP.NET MVC 4.0 学习3-Model

Model負責獲取數據庫中的資料,並對數據庫中的數據進行處理. MVC中有關 數據庫 的任務都由Model來完成,Model中對數據資料進行定義,Controller和View中都會參考到Model,從而對數據庫進行增刪改的操作.      Model不需要依賴Controller或是View,所以Model的獨立性很高,我們可以把Model獨立出來一個專案. 1,Model中添加實體數據模型 DB中添加新的DataBase:message,添加Table:MessageBoard USE [m

ASP.NET MVC 4.0 学习4-Code First

之前我們需要用到的數據,通過添加Entity實體數據模型把數據庫中需要的Database拉到項目中如下圖, 而就是Code First就是相對於這種處理數據的方法而言的 Code First更加準確的解讀是開發人員只需要編寫程式(Code Only),系統會自動建立模型和數據庫 我們來新建一個專案看一下Code First的具體實現 1,新專案的Model中加入類別MessageBoard存儲留言信息 MessageBoard.cs中添加字段屬性: using System; using Sys

ASP.Net MVC开发基础学习笔记(3):Razor视图引擎、控制器与路由机制学习

首页 头条 文章 频道                         设计频道 Web前端 Python开发 Java技术 Android应用 iOS应用 资源 小组 相亲 频道 首页 头条 文章 小组 相亲 资源 设计 前端 Python Java 安卓 iOS 登录 注册 首页 最新文章 经典回顾 开发 Web前端 Python Android iOS Java C/C++ PHP .NET Ruby Go 设计 UI设计 网页设计 交互设计 用户体验 设计教程 设计职场 极客 IT技术

ASP.Net MVC开发基础学习笔记:三、Razor视图引擎、控制器与路由机制学习

一.天降神器“剃须刀” — Razor视图引擎 1.1 千呼万唤始出来的MVC3.0 在MVC3.0版本的时候,微软终于引入了第二种模板引擎:Razor.在这之前,我们一直在使用WebForm时代沿留下来的ASPX引擎或者第三方的NVelocity模板引擎. Razor在减少代码冗余.增强代码可读性和Visual Studio智能感知方面,都有着突出的优势.Razor一经推出就深受广大ASP.Net开发者的喜爱. 1.2 Razor的语法 (1)Razor文件类型:Razor支持两种文件类型,分

asp.net mvc 3.0 知识点整理 ----- (2).Controller中几种Action返回类型对比

通过学习,我们可以发现,在Controller中提供了很多不同的Action返回类型.那么具体他们是有什么作用呢?它们的用法和区别是什么呢?通过资料书上的介绍和网上资料的查询,这里就来给大家列举和大致的概括下. (1). ActionResult(base):最基本的Action类型,返回其他类型都可以写ActionResult. (2). ContentResult:返回ContentResult用户定义的内容类型. public ActionResult Content() { return

我要学ASP.NET MVC 3.0(十三): MVC 3.0 防止跨站点请求伪造 (CSRF) 攻击

我要学ASP.NET MVC 3.0(十三): MVC 3.0 防止跨站点请求伪造 (CSRF) 攻击 概述      众所周知,ASP.Net MVC程序在浏览器运行时产生了标准的Html标签,包括浏览器要发送的关键数据等内容都在Html内容里面,听起来不错,但是假如我们仿造类似的Html内容,更改里面关键数据,在浏览器运行起来会怎么样呢?好下面我们就做这样一个例子.       CSRF攻击例子 首先我们拿以前做好的person/edit作为例子 先看控制器代码 //初始页面        

asp.net mvc 3.0 知识点整理 ----- (4).HtmlHelper(Html 辅助方法)介绍

在View视图中,Html的类型是System.Web.Mvc.HtmlHelper<T>, 所有的辅助方法都需要和ModelState交互.那么,ModelState是什么呢?它是模型绑定的附属品,并且存有模型绑定期间检测到的所有验证错误.以及用户提交用到来更新模型的原始值.本篇博文,我们主要来介绍下一些常用的html辅助方法的主要作用和使用方法. 1. Html.BeginForm()和Ajax.BeginForm().   Html.BeginForm(): 同于传统的表单提交,主要是生