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