同桌上课用手指进去了好爽_欧美丰满熟妇xxⅹⅹ性大i_成人av天天日天天拍拍_猛男gay帅男gay男男同志_欧美va天堂在线观看_人妻无码av中文系列三里桃花_亚欧免费无码在线观看_久久久精品国产亚洲av水_日韩在线免费看污污污_2021无码专区人妻系列日韩

首頁 優(yōu)化推廣 從零開始學(xué)習(xí) ASP.NET MVC 1.0 (三) Controller/Action 深入解析與應(yīng)用實(shí)例

從零開始學(xué)習(xí) ASP.NET MVC 1.0 (三) Controller/Action 深入解析與應(yīng)用實(shí)例

來源: | 時間:2010/8/9 14:40:59 |

一.摘要

一個Url請求經(jīng)過了Routing處理后會調(diào)用Controller的Action方法. 中間的過程是怎樣的? Action方法中返回ActionResult對象后,如何到達(dá)View的? 本文將講解Controller的基本用法,  深入分析Controller的運(yùn)行機(jī)制, 并且提供了創(chuàng)建所有類型Action的代碼. 值得學(xué)習(xí)ASP.NET MVC時參考.

二.承上啟下

在上一篇文章中, 我已經(jīng)學(xué)會了如何使用Routing獲取Controller和Action, 隨后的程序會調(diào)用Controller中的Action方法.

每個Action方法都要返回一個ActionResult對象. 一個Action會將數(shù)據(jù)傳遞給View,如圖:

image

三.Controller與Action的作用

1.職責(zé)

Controller負(fù)責(zé)將獲取Model數(shù)據(jù)并將Model傳遞給View對象.通知View對象顯示.

2.ASP.NET MVC中的Controller和Action

在ASP.NET MVC中, 一個Controller可以包含多個Action. 每一個Action都是一個方法, 返回一個ActionResult實(shí)例.

ActionResult類包括ExecuteResult方法, 當(dāng)ActionResult對象返回后會執(zhí)行此方法.

下面分層次的總結(jié)Controller 處理流程:

1. 頁面處理流程

發(fā)送請求 –> UrlRoutingModule捕獲請求 –> MvcRouteHandler.GetHttpHandler() –> MvcHandler.ProcessRequest()

2.MvcHandler.ProcessRequest() 處理流程:

使用工廠方法獲取具體的Controller –> Controller.Execute() –> 釋放Controller對象

3.Controller.Execute() 處理流程

獲取Action –> 調(diào)用Action方法獲取返回的ActionResult –> 調(diào)用ActionResult.ExecuteResult() 方法

4.ActionResult.ExecuteResult() 處理流程

獲取IView對象-> 根據(jù)IView對象中的頁面路徑獲取Page類-> 調(diào)用IView.RenderView() 方法(內(nèi)部調(diào)用Page.RenderView方法)

通過對MVC源代碼的分析,我們了解到Controller對象的職責(zé)是傳遞數(shù)據(jù),獲取View對象(實(shí)現(xiàn)了IView接口的類),通知View對象顯示.

View對象的作用是顯示.雖然顯示的方法RenderView()是由Controller調(diào)用的,但是Controller僅僅是一個"指揮官"的作用, 具體的顯示邏輯仍然在View對象中.

需要注意IView接口與具體的ViewPage之間的聯(lián)系.在Controller和View之間還存在著IView對象.對于ASP.NET程序提供了WebFormView對象實(shí)現(xiàn)了IView接口.WebFormView負(fù)責(zé)根據(jù)虛擬目錄獲取具體的Page類,然后調(diào)用Page.RenderView().

四.ActionResult解析

通過上面的流程,我們知道了ActionResult對象在整個流程中的作用.ActionResult是一個抽象類, 在Action中返回的都是其派生類.下面是我整理的ASP.NET MVC 1.0 版本中提供的ActionResult派生類:

目前ASP.NET MVC還沒有提供官方的ActionResult列表.上面的列表是我在源代碼中分析得出的.有些解釋的可能不夠清楚,請諒解.

下面我將列舉各個ActionResult的實(shí)例.

五.實(shí)例應(yīng)用

1.添加Controller

安裝了ASP.NET MVC后, 在項目上點(diǎn)擊右鍵會找到添加Controller項:

image

2.添加Action

下面這個類提供了返回各種類型的ActionResult的Action實(shí)例:

public class DemoController : Controller
    {

        /// <summary>
        /// http://localhost:1847/Demo/ContentResultDemo
        /// </summary>
        /// <returns></returns>
        public ActionResult ContentResultDemo()
        {
            string contentString = 
                    

                    
                
            
            
        
    


    





服務(wù)熱線

153 8323 9821

功能和特性

價格和優(yōu)惠

網(wǎng)站和維護(hù)

推廣和優(yōu)化

微信服務(wù)號

類名 抽象類 父類 功能 ContentResult     根據(jù)內(nèi)容的類型和編碼,數(shù)據(jù)內(nèi)容. EmptyResult     空方法. FileResult abstract   寫入文件內(nèi)容,具體的寫入方式在派生類中. FileContentResult   FileResult 通過 文件byte[] 寫入文件. FilePathResult   FileResult 通過 文件路徑 寫入文件. FileStreamResult   FileResult 通過 文件Stream 寫入文件. HttpUnauthorizedResult     拋出401錯誤 JavaScriptResult     返回javascript文件 JsonResult     返回Json格式的數(shù)據(jù) RedirectResult     使用Response.Redirect重定向頁面 RedirectToRouteResult     根據(jù)Route規(guī)則重定向頁面 ViewResultBase abstract   調(diào)用IView.Render() PartialViewResult   ViewResultBase 調(diào)用父類ViewResultBase 的ExecuteResult方法.
重寫了父類的FindView方法.
尋找用戶控件.ascx文件
ViewResult   ViewResultBase 調(diào)用父類ViewResultBase 的ExecuteResult方法.
重寫了父類的FindView方法.
尋找頁面.aspx文件