老罗学习MVC之旅:MVC组件分析
2 System.Web.Mvc V 4.0.0.0 組件分析
2.1 Routing組件(路由選擇)
Routing的作用就是負(fù)責(zé)分析Url
?
Action的要求
? 必須是一個(gè)公有方法
? 必須返回ActionResult類型
? 必須是實(shí)例方法
? 不能是范型方法
? 沒有標(biāo)注NonActionAttribute
? 不能被重載(overload)
2.2 Controller(控制器)
2.3 控制器可用的ActionResult
ActionResult是控制器方法執(zhí)行后返回的結(jié)果類型,控制器方法可以返回一個(gè)直接或間接從ActionResult抽象類繼承的類型,如果返回的是非ActionResult類型,控制器將會(huì)將結(jié)果轉(zhuǎn)換為一個(gè)ContentResult類型。默認(rèn)的ControllerActionInvoker調(diào)用ActionResult.ExecuteResult方法生成應(yīng)答結(jié)果。
??? MVC中實(shí)現(xiàn)的默認(rèn)ActionResult如下:
1、ContentResult: 返回簡單的純文本內(nèi)容,可通過ContentType屬性指定應(yīng)答文檔類型,通過ContentEncoding屬性指定應(yīng)答文檔的字符編碼。可通過Controller類中的Content方法便捷地返回ContentResult對(duì)象。如果控制器方法返回非ActionResult對(duì)象,MVC將簡單地以返回對(duì)象的ToString()內(nèi)容為基礎(chǔ)產(chǎn)生一個(gè)ContentResult對(duì)象。
2、EmptyResult: 返回一個(gè)空的結(jié)果。如果控制器方法返回一個(gè)null,MVC將其轉(zhuǎn)換成EmptyResult對(duì)象。
3、RedirectResult: 表示一個(gè)連接跳轉(zhuǎn),相當(dāng)于ASP.NET中的Response.Redirect方法。對(duì)應(yīng)的Controller方法為Redirect。
4、RedirectToRouteResult:同樣表示一個(gè)調(diào)轉(zhuǎn),MVC會(huì)根據(jù)我們指定的路由名稱或路由信息(RouteValueDictionary)來生成Url地址,然后調(diào)用Response.Redirect跳轉(zhuǎn)。對(duì)應(yīng)的Controller方法為RedirectToAction和RedirectToRoute。
5、ViewResult: 表示一個(gè)視圖結(jié)果,它根據(jù)視圖模板產(chǎn)生應(yīng)答內(nèi)容。對(duì)應(yīng)Controller方法為View。
6、PartialViewResult: 表示一個(gè)部分視圖結(jié)果,與ViewResult本質(zhì)上一致,只是部分視圖不支持母版,對(duì)應(yīng)于ASP.NET,ViewResult相當(dāng)于一個(gè)Page,而PartialViewResult則相當(dāng)于一個(gè)UserControl。它對(duì)應(yīng)的Controller方法為PartialView。
7、HttpUnauthorizedResult: 表示一個(gè)未經(jīng)授權(quán)訪問的錯(cuò)誤。MVC會(huì)向客戶端發(fā)送一個(gè)401的應(yīng)答狀態(tài)。如果在web.config中開啟了表單驗(yàn)證(authentication mode="Forms"),則401狀態(tài)會(huì)將Url轉(zhuǎn)向指定的loginUrl鏈接。
8、JavaScriptResult: 本質(zhì)上是一個(gè)文本內(nèi)容,只是將Response.ContentType設(shè)置為 application/x-javascript,此結(jié)果應(yīng)該和MicrosoftMvcAjax.js腳本配合使用,客戶端接收到Ajax應(yīng)答后,將判斷Response.ContentType的值,如果是application/x-javascript,則直接eval執(zhí)行返回的應(yīng)答內(nèi)容。此結(jié)果類型對(duì)應(yīng)的Controller方法為JavaScript。
9、JsonResult: 表示一個(gè)JSON結(jié)果。MVC將Response.ContentType設(shè)置為application/json,并通過JavaScriptSerializer類將指定對(duì)象序列化為Json表示方式。需要注意,默認(rèn)情況下,MVC不允許GET請(qǐng)求返回JSON結(jié)果,要解除此限制,在生成JsonResult對(duì)象時(shí),將其JsonRequestBehavior屬性設(shè)置為JsonRequestBehavior.AllowGet。此結(jié)果對(duì)應(yīng)的Controller方法為Json。
10、FilePathResult、FileContentResult、FileStreamResult: 這三個(gè)類繼承于FileResult,表示一個(gè)文件內(nèi)容,三者的區(qū)別在于,FilePath通過路徑傳送文件到客戶端,FileContent通過二進(jìn)制數(shù)據(jù)的方式,而FileStream是通過Stream的方式來傳送。Controller為這三個(gè)文件結(jié)果類型提供了一個(gè)名為File的重載方法。
通過直接或間接地從ActionResult繼承,可實(shí)現(xiàn)自定義的結(jié)果類型.
2.4 View(視圖)
2.5 ViewModel(視圖模型)
HtmlHelper幫助類
用法大全
http://www.cnblogs.com/jyan/archive/2012/07/23/2604474.html
FormExtensions,
InputExtensions,主要有5種類型的擴(kuò)展方法,分別用于CheckBox控件、Hidden控件、Pass控件、RadionButton控件和TextBox控件
LinkExtensions, 該類主要用于生成相關(guān)鏈接,主要擴(kuò)展了ActionLink和RouteLink方法
SelectExtensions,
TextAreaExtensions,
ValidationExtensions,
RenderPartialExtensions
ActionLink:擴(kuò)展方法主要實(shí)現(xiàn)一個(gè)連接,共有十個(gè)重載方法。
UrlHelper幫助類
看類名也都知道這個(gè)類是用來成URL在 ASP .NET MVC應(yīng)用程序中。
UrlHelper提供了四個(gè)非常常用的四個(gè)方法。
1. Action方法通過提供Controller,Action和各種參數(shù)生成一個(gè)URL,
2. Content方法是將一個(gè)虛擬的,相對(duì)的路徑轉(zhuǎn)換到應(yīng)用程序的絕對(duì)路徑,
3. Encode方法是對(duì) URL地址進(jìn)行加密,與Server.Encode方法一樣。
4. RouteUrl方法是提供在當(dāng)前應(yīng)用程序中規(guī)定的路由規(guī)則中匹配出URL。
另外還有兩個(gè)屬性,分別是RequestContext和RouteCollection兩個(gè)屬性,分別指的是包含HTTP上下文和RouteData兩個(gè)屬性,另外,RouteCollection是整個(gè)當(dāng)前應(yīng)用程序中規(guī)定的路由規(guī)則。
自定義控件
微軟提供的HtmlHelper已經(jīng)是足夠大部分開發(fā)人員使用了,但是有一些功能要用微軟提供的HtmlHelper可能還不滿足要求。接下來就談?wù)勅绾巫远x的過程。
首先自定義的方法就是對(duì)HtmlHelper對(duì)象的擴(kuò)展。
擴(kuò)展方法實(shí)現(xiàn)的三要素:1、靜態(tài)類 2、靜態(tài)方法 3、this關(guān)鍵字
1、先定義一個(gè)類,例如:MyHtmlHelper:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace MvcApplicationFirstDome.Models {
//靜態(tài)類
public static class MyHtmlHelper
{
//靜態(tài)方法
}
}
2、假設(shè)要擴(kuò)展的方式是GetSpan,作用就是當(dāng)你傳入?yún)?shù)時(shí),內(nèi)部封裝了之后返回結(jié)果,代碼如下。注意在MyHtmlHelper類中要引用using System.Web.Mvc命名空間。
//靜態(tài)方法
public static string GetSpan(this HtmlHelper htmlHelper,string text)
{
return "<span style='color:Red'>"+text+"</span>";
}
經(jīng)過上面兩步之后HtmlHelper的擴(kuò)展方法GetSpan基本可以使用了,接下來就講解如何在頁面調(diào)用了。
2.6 Filters(過濾器)
ASP.NET MVC Framework支持四種不同類型的Filter:
1. Authorization filters – 實(shí)現(xiàn)IAuthorizationFilter接口的屬性.
2. Action filters – 實(shí)現(xiàn)IActionFilter接口的屬性.
3. Result filters – 實(shí)現(xiàn)IResultFilter接口的屬性.
4. Exception filters – 實(shí)現(xiàn)IExceptionFilter接口的屬性.
ActionFilterAttribute類有以下的方法可以重寫:
· OnActionExecuting – 在controller action執(zhí)行之前調(diào)用
· OnActionExecuted – 在controller action執(zhí)行之后調(diào)用
· OnResultExecuting – 在controller action result執(zhí)行之前調(diào)用
· OnResultExecuted – 在controller action result執(zhí)行之后調(diào)用
執(zhí)行的順序如下圖:
創(chuàng)建 Action filter 必須實(shí)現(xiàn) IActionFilter 接口,它定義了兩個(gè)方法:
| 方法名 | 調(diào)用時(shí)機(jī) | 可進(jìn)行的操作 |
| OnActionExecuting | Action方法執(zhí)行之前 | 可以給 filterContext.Result 賦值,以阻止 Action 的執(zhí)行 |
| OnActionExecuted | Action方法執(zhí)行之后 | 可以通過 filterContext.Exception 獲取 Action 執(zhí)行時(shí)拋出的異常, 并能把它標(biāo)記為“已處理”:filterContext.ExceptionHandled = true。 可以查看通過filterContext.Result查看 Action 的執(zhí)行結(jié)果,但是不能修改。 |
下面就使用 OnActionExecuting 可以在 Action 方法執(zhí)行前 能查看并修改參數(shù)值的特性 來完成敏感信息的過濾功能。
通過直接或間接地從ActionFilterAttribute繼承,可實(shí)現(xiàn)自定義的結(jié)果類型.總結(jié)
以上是生活随笔為你收集整理的老罗学习MVC之旅:MVC组件分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电饼铛有必要买吗
- 下一篇: MusicXML 3.0 (4) - 谱