MVC知識(shí)點(diǎn)整理匯總

MVC與ASP.NET MVC基礎(chǔ)概念

MVC是Model-View-Controller的縮寫.

MVC將應(yīng)用程序劃分為3大組件:模型\視圖\控制器.

MVC不是ASP.NET所特有,它只是一種開發(fā)理念.java中的struts2也是一種MVC模型.

ASP.NET?MVC從2008年發(fā)布1.0版以來,截至2014年ASP.NET?MVC最新版本已經(jīng)是5.0.

ASP.NET?MVC從1.0版開始,就已經(jīng)開放源代碼(源碼地址:aspnetwebstack.codeplex.com).

ASP.NET?MVC官網(wǎng)地址:http://www.asp.net/mvc

MVC三大組件的相互關(guān)系

在控制器中可以直接調(diào)用視圖和模型

在視圖中可以調(diào)用模型.

模型不能調(diào)用視圖

模型能夠限定視圖中使用的數(shù)據(jù),但視圖中使用的模型應(yīng)由控制器提供

在視圖中可以調(diào)用控制器(通過視圖中表單的提交和點(diǎn)擊超鏈接的方式調(diào)用)

ASP.NET?Webform模型和ASP.NET?MVC模型的關(guān)系

二者都是基于ASP.NET?Web框架構(gòu)建的開發(fā)模型.所以ASP.NET中的一些功能可以被二者公用.

Webform編程模型是典型的以事件驅(qū)動(dòng)的web模型,而MVC則不是.

Webform的URL地址是基于文件系統(tǒng)的,而MVC則是基于Action.

ASP.NET?MVC中的約定

所有的控制器必須放到Controllers文件夾下

所有的控制器類名必須以Controller結(jié)尾

所有的模型應(yīng)該放到Models目錄下

所有的視圖文件都應(yīng)該放到Views目錄下.

所有的控制器類都應(yīng)該繼承自Controller類(本質(zhì)上是要繼承Icontroller接口)

在控制器類中的public方法被成為Action(行為)

如果在相應(yīng)的視圖目錄中沒有找到視圖文件,那么會(huì)尋找Views\Shared目錄下名稱相同的視圖文件

在Action中return?view(),默認(rèn)會(huì)返回和Action名稱一樣的視圖文件.

在Global.asax全局應(yīng)用程序類中注冊了默認(rèn)路由(名稱為Default),默認(rèn)路由指定了Controller默認(rèn)為Home,Action默認(rèn)為Index,參數(shù)id為可選參數(shù).所以在URL地址中如果不輸入controller默認(rèn)訪問Home控制器;如果不輸入action默認(rèn)訪問名稱為Index的action.

http://localhost:54321/解釋:

根據(jù)默認(rèn)路由規(guī)則雏亚,等價(jià)于=>?http://localhost:54321/Home/Index

http://localhost:54321/Home/Index/5解釋:

數(shù)值5會(huì)自動(dòng)映射到action中名稱為id的參數(shù)中酪耳。

Http://localhost:54321/Home/Index/5?name=jack&age=20解釋:

其中參數(shù)包括id腌零、name和age三個(gè)

其他

在視圖文件中,有一個(gè)名稱為Model屬性,它指代的是從Action中傳遞的模型數(shù)據(jù).為了使用模型數(shù)據(jù),我們還需要在<%@Page??%>指令的Inherits屬性中設(shè)置模型數(shù)據(jù)的類型.

ASP.NET?MVC進(jìn)階一

控制器相關(guān)

在Controller類中方法訪問級(jí)別為public的方法,就是行為(Action).

如果不希望Controller類中的方法成為Action(可以在地址欄中被訪問),有兩種實(shí)現(xiàn)方式:

將方法的訪問級(jí)別設(shè)置為private

在方法上添加特性標(biāo)記[NonAction]

諸如新增\修改等功能模塊,我們往往會(huì)創(chuàng)建2個(gè)名稱相同的Action:一個(gè)action用于加載新增\修改頁面;另一個(gè)action用于處理新增\修改頁面提交的表單數(shù)據(jù).那么如何區(qū)分在何時(shí)調(diào)用哪個(gè)action呢?

我們將加載新增|修改頁面時(shí)被調(diào)用的action,添加[HttpGet]特性標(biāo)記;將處理頁面提交的表單數(shù)據(jù)時(shí)調(diào)用的action,添加[HttpPost]特性標(biāo)記.下面的示例代碼演示了如何實(shí)現(xiàn)學(xué)生的新增(action相關(guān)的代碼)

如何在Action中獲取表單提交的數(shù)據(jù)?

表單中提交的數(shù)據(jù),可以通過Action的參數(shù)進(jìn)行映射.

映射的前提條件:Html標(biāo)記的name屬性值和action中參數(shù)的名稱要一致.

下面的示例代碼演示了映射的過程(注意粉色框標(biāo)記的部分):

Action中如何映射復(fù)雜對(duì)象?

對(duì)于上面的映射代碼,我們還可以有另外一種等價(jià)的寫法,就是將映射的屬性定義到一個(gè)實(shí)體類中,這樣我們就可以在action中添加該實(shí)體類型的參數(shù),參考代碼如下所示:

如何從一個(gè)Action中跳轉(zhuǎn)至另外一個(gè)Action?

新增或修改功能完成后,需要跳轉(zhuǎn)至數(shù)據(jù)列表頁面,我們可以通過如下代碼實(shí)現(xiàn):

代碼=>?returnRedirectToAction(“ActionName”,?“ControllerName”).

視圖相關(guān)

在ASPX視圖引擎中,可以使用asp服務(wù)器控件,但它的作用僅僅局限與生成html代碼,而不推薦開發(fā)人員使用asp控件的事件.因此建議開發(fā)人員手工編寫Html標(biāo)記图谷。

但是手寫Html標(biāo)記比較耗費(fèi)時(shí)間,有沒有更好的解決方案?答案就是使用Html輔助方法翩活。

Html輔助方法

Html輔助方法的作用就是通過調(diào)用C#方法的方式,快速的生成相應(yīng)的html標(biāo)記.

Html輔助方法分為2大類:弱類型html輔助方法和強(qiáng)類型html輔助方法.

其中以For關(guān)鍵字結(jié)尾的都是強(qiáng)類型的輔助方法.下面的示例代碼演示了二者的調(diào)用方式便贵,以及生成的html源碼菠镇。

注意:Html輔助方法有很多種重載形式,在開發(fā)過程中可以根據(jù)實(shí)際需要自行選擇.比如要實(shí)現(xiàn)一個(gè)包含class\style\onchange屬性和事件的單行文本框,可以參考如下代碼:

強(qiáng)調(diào):如何使用HTML輔助方法生成form標(biāo)記?

生成form標(biāo)記的兩個(gè)Html輔助方法為:Html.BeginForm()和Html.EndForm(),但他們在使用時(shí)和其他的Html輔助方法有所不同承璃,下面的示例代碼演示了它們的兩種用法:

如何在URL地址中傳遞參數(shù)?

場景一:將學(xué)生ID值映射到名稱為id參數(shù)上

場景二:將學(xué)生ID值映射到名稱為stuId參數(shù)上

場景三:url地址中包括stuId和name兩個(gè)參數(shù)

這三種場景的使用代碼如下所示:

其他

在實(shí)際開發(fā)過程中,一個(gè)小的功能模塊就對(duì)應(yīng)一個(gè)控制器.比如學(xué)生信息管理就是一個(gè)控制器,新增學(xué)生\修改學(xué)生\查詢學(xué)生列表\刪除學(xué)生都可以對(duì)應(yīng)控制器中的Action.

常用Html輔助方法匯總

弱類型

強(qiáng)類型

單行文本框

Html.TextBox()

Html.TextBoxFor()

多行文本框

Html.TextArea()

Html.TextAreaFor()

密碼框

Html.Password()

Html.PasswordFor()

復(fù)選框

Html.Checkbox()

Html.CheckBoxFor()

單選按鈕

Html.RadioButton()

Html.RadioButtonFor()

下拉列表框

Html.DropdownList()

Html.DropdownListFor()

平鋪列表框

Html.ListBox()

Html.ListBoxFor()

Label

Html.Label()

Html.LabelFor()

Form表單

Html.BeginForm()?????Html.EndForm()

超鏈接

Html.ActionLink()

如何在視圖中使用下拉列表

第一步:在action中構(gòu)造好下拉列表中需要的數(shù)據(jù)利耍,數(shù)據(jù)的類型為IEnumerable。

第二步:將構(gòu)造好的數(shù)據(jù)放到Controller中的ViewData(ViewBag|TempData)屬性中盔粹。

第三步:在視圖view中使用Html.DropDownList輔助方法來生成下拉列表隘梨,而綁定的數(shù)據(jù)可以使用視圖View中的ViewData來獲取(換句話講就是舷嗡,Controller中放置到ViewData的數(shù)據(jù)轴猎,可以在視圖View中的ViewData屬性中提取)进萄。

在視圖中使用Html.DropDownList綁定Ienumerable

ASP.NET?MVC進(jìn)階二

數(shù)據(jù)驗(yàn)證

數(shù)據(jù)驗(yàn)證的步驟

在模型類中添加與驗(yàn)證相關(guān)的特性標(biāo)記

在客戶端導(dǎo)入與驗(yàn)證相關(guān)的js文件和css文件

使用與驗(yàn)證相關(guān)的Html輔助方法

在服務(wù)器端判斷是否通過服務(wù)器端驗(yàn)證

常用的驗(yàn)證標(biāo)記

Required:非空驗(yàn)證

StringLength:驗(yàn)證字符串的長度

RegularExpression:正則表達(dá)式驗(yàn)證

Compare:比較兩個(gè)字段的值是否相等

Range:范圍驗(yàn)證

Remote:服務(wù)器驗(yàn)證(需要在controller中編寫返回值為JsonResult的Action)

自定義驗(yàn)證標(biāo)記

與驗(yàn)證相關(guān)的js文件

在ASP.NET?MVC中提供了2套驗(yàn)證框架,分別是微軟驗(yàn)證框架和jquery驗(yàn)證框架.默認(rèn)啟用了jquery驗(yàn)證框架.

注意:這些js文件的順序不能顛倒;其中Site.css文件中定義了數(shù)據(jù)驗(yàn)證使用的樣式.

驗(yàn)證相關(guān)的Html輔助方法

注意:1.必須使用Html.ValidationMessage()和Html.ValidationMessageFor()來顯示驗(yàn)證失效的提示信息捻脖;

2.被驗(yàn)證的控件(如文本框\下拉列表框等)必須使用Html輔助方法生成才有效.

在服務(wù)器端判斷模型是否通過了驗(yàn)證(服務(wù)器端驗(yàn)證)

頁面中如果使用了MVC驗(yàn)證功能,那么在后臺(tái)對(duì)應(yīng)的Action中必須通過ModelState.IsValid判斷是否通過了服務(wù)器端驗(yàn)證中鼠。只有通過了服務(wù)器端驗(yàn)證可婶,才能執(zhí)行其他的業(yè)務(wù)邏輯代碼。

使用要點(diǎn):

被驗(yàn)證的標(biāo)記不能是純html,必須使用相應(yīng)的html輔助方法

例如:Html.TextBoxFor(model=>model.UserName),則驗(yàn)證有效;

,則驗(yàn)證無效;

必須使用相應(yīng)的html輔助方法顯示驗(yàn)證消息(Html.ValidationMessage)

被驗(yàn)證的控件必須放在有html.beginform的輔助方法內(nèi)部(不能是純標(biāo)記).

客戶端驗(yàn)證是不安全的援雇,容易被禁用或欺騙矛渴,所以一定要在服務(wù)器端判斷ModelState.IsValid是否為true.

Action與View的數(shù)據(jù)傳遞

在某些情況下,視圖需要顯示多份數(shù)據(jù)(比如被修改的員工信息\崗位列表\部門列表),但是Action在返回視圖時(shí),View()方法只能傳遞1個(gè)object類型的數(shù)據(jù),那么其他的數(shù)據(jù)該如何傳遞?

ASP.NET?MVC為我們提供了3種方案:ViewData\TempData\ViewBag.

重要提示:在Controller和View中都有這三個(gè)屬性,在Controller的相應(yīng)屬性中存放了數(shù)據(jù)后惫搏,就可以在View的相應(yīng)屬性中提取這些數(shù)據(jù)具温。

ViewData

ViewData是一個(gè)字典類型.向里面添加數(shù)據(jù)時(shí)要以鍵值對(duì)的形式添加.

首先在Action中向ViewData中添加,其次就可以在View中訪問ViewData來提取數(shù)據(jù).

ViewBag

ViewBag是一個(gè)動(dòng)態(tài)類型的屬性。在ASP.NET?MVC?3.0中才加入了ViewBag屬性.

動(dòng)態(tài)類型:dynamic筐赔,就是可以事先不為其定義屬性,通過直接給屬性賦值的方式就可以隨時(shí)為它添加新的屬性.

下面的代碼演示了向ViewBag中存放cls和stu兩個(gè)對(duì)象桂躏,這兩個(gè)對(duì)象分別放到了屬性ClassInfo和StudentInfo中。

TempData

TempData的用法和ViewData很相似川陆,都是字典類型.那他們的區(qū)別是什么?

ViewData中存儲(chǔ)的數(shù)據(jù)僅僅對(duì)本次訪問的當(dāng)前action有效.而TempData中存儲(chǔ)的數(shù)據(jù),除了對(duì)本次訪問的當(dāng)前action有效外,還對(duì)本次訪問的其他action有效(比如在Action1中向TempData中存放了數(shù)據(jù),即使從Action1跳轉(zhuǎn)至Action2后蛮位,仍然可以在Action2中從TempData提取數(shù)據(jù)较沪。而ViewData和ViewBag都無法做到這一點(diǎn)).因此,TempData中數(shù)據(jù)的生命周期比ViewData|ViewBag中的生命周期要長.

ActionResult的實(shí)現(xiàn)類

在ASP.NET?MVC模型中,Action用于響應(yīng)用戶的各種請求失仁,比如向客戶端返回html文檔尸曼、html片段、json數(shù)據(jù)萄焦、純文本控轿、文件等結(jié)果冤竹。在ASP.NET?MVC中通過在Action(行為或操作)方法中返回ActionResult類型的對(duì)象來實(shí)現(xiàn)向客戶端響應(yīng)上面的各種結(jié)果。

ActionResult類是個(gè)抽象類(抽象類無法直接被實(shí)例化).

ActionResult有很多實(shí)現(xiàn)類茬射,不同的實(shí)現(xiàn)類用于響應(yīng)客戶端不同的結(jié)果鹦蠕。并且在Controller類中提供了大量的輔助方法,這些輔助方法可以快速的創(chuàng)建各種ActionResult.

在實(shí)際開發(fā)中,我們更多的是使用Controller類中的輔助方法在抛,而非自己手工創(chuàng)建ActionResult的實(shí)現(xiàn)類钟病。

ViewResult類

ViewResult類的作用是向客戶端響應(yīng)View目錄中一個(gè)視圖文件.

Controller類中提供了View()方法,來快速的返回一個(gè)ViewResult類對(duì)象.

ContentResult類

該類用于向客戶端返回一段文本內(nèi)容(純文本\HTML...).

在Controller類中的輔助方法為:Controller.Content(string??content);

RedirectToRouteResult類

該類的作用是從當(dāng)前action跳轉(zhuǎn)至其他action.

在Controller類中的輔助方法為:RedirectToAction(“ActionName”,“ControllerName”)

RedirectResult類

在服務(wù)器端從當(dāng)前Action跳轉(zhuǎn)到其他URL地址.

在Controller類中的輔助方法為:Controller.Redirect(string??url)

JsonResult類

該類用于向客戶端返回一段Json格式的字符串.

在Controller類中的輔助方法為:Controller.Json(object??data);

注意:默認(rèn)情況下mvc拒絕響應(yīng)以get方式發(fā)送的ajax請求刚梭,需要使用JsonRequestBehavior.AllowGet肠阱。

PartialViewResult類

該類的作用是向客戶端響應(yīng)Views目錄的一個(gè)分部視圖文件。分部視圖就是只包含html片段的視圖文件.

在Controller類中的輔助方法為:Controller.PartialView();

FilePathResult類

該類用于實(shí)現(xiàn)文件下載.

在Controller類中的輔助方法為:Controller.File(string??filePath,??string??contentType,?string??fileName);

EmptyResult類

該類用于向客戶端響應(yīng)一個(gè)空結(jié)果朴读。

HttpStatusCodeResult類

該類用于向客戶端相應(yīng)指定的狀態(tài)碼.

HttpNotFoundResult類就是HttpStatusCodeResult的子類屹徘,表示404這一狀態(tài)碼。

下面的是一些常用的http狀態(tài)碼:

404:資源未找到(表示客戶端請求服務(wù)器的資源地址不存在)

500:服務(wù)器內(nèi)部錯(cuò)誤(以5XX開頭的表示服務(wù)器端在處理過程中出現(xiàn)的錯(cuò)誤)

200:成功(表示客戶端發(fā)送的請求被服務(wù)器成功的處理和響應(yīng))

其他

如何在aspx頁面中導(dǎo)入命名空間?

方式一:在指定的頁面添加<%@?Import?Namespace=”命名空間”%>

方式二:在項(xiàng)目的web.config配置文件中添加pages---namespaces----add

通過方式二添加的命名空間可以在所有的aspx頁面中使用;而方式一添加的命名空間只能在當(dāng)前頁面中使用.

ASP.NET?MVC進(jìn)階三

ASP.NET?MVC中的AJAX應(yīng)用

首先,在ASP.NET?MVC中使用自帶的ajax功能,必須要導(dǎo)入2個(gè)js文件(順序不能顛倒):

ASP.NET?MVC提供了2個(gè)常用的ajax輔助方法.

Ajax.ActionLink

該輔助方法用于在頁面上生成具有ajax功能的超鏈接.

在該輔助方法中有一個(gè)AjaxOptions類型的參數(shù),它包括如下屬性:

Confirm:在發(fā)送ajax請求前,彈出確認(rèn)對(duì)話框,該屬性就是設(shè)置對(duì)話框中的提示消息

HttpMethod:用于設(shè)置請求的類型:Get|Post

UpdateTargetId:用于設(shè)置服務(wù)器響應(yīng)的結(jié)果更新到頁面中目標(biāo)元素ID

InsertionMode:用于設(shè)置服務(wù)器相應(yīng)的結(jié)果如何插入到被更新的元素中,它的值可以包括3種:

InsertionMode.Replace:用新值替換舊值(默認(rèn)值)

InsertionMode.InsertAfter:將新值插入到目標(biāo)元素的底部

InsertionMode.InsertBefore:將新值插入到目標(biāo)元素的頂部

OnBegin:當(dāng)執(zhí)行ajax請求前,執(zhí)行的js函數(shù)

OnSuccess:當(dāng)執(zhí)行ajax請求成功時(shí),執(zhí)行的js函數(shù)

OnFailure:當(dāng)ajax請求失敗時(shí),執(zhí)行的js函數(shù)

OnComplate:當(dāng)ajax請求完成后,執(zhí)行的js函數(shù)(不管請求失敗或成功,都會(huì)執(zhí)行)

LoadingElementId:在ajax請求期間,可以顯示一段友好的提示,該屬性用于設(shè)置提示元素的ID

LoadingElementDuration:提示元素在顯示和隱藏時(shí),可以執(zhí)行一段動(dòng)畫,該屬性用于設(shè)置提示元素的動(dòng)畫執(zhí)行時(shí)間

Ajax.BeginForm

該ajax輔助方法用于以ajax方式提交表單數(shù)據(jù).

其他

如何在頁面中加載分部視圖?

方式一:調(diào)用Html.RenderPartial(“viewName”)

方式二:調(diào)用Html.RenderAction(“actionName”)

何時(shí)使用RenderAction,何時(shí)使用RenderPartial?

如果需要向視圖中傳遞數(shù)據(jù),而原視圖中又沒有需要傳遞的數(shù)據(jù)時(shí),就需要調(diào)用RenderAction.

注意:Html.RenderPartial有多種重載形式,下面列舉它的2種常用形式:

Html.RenderPartial(“分布視圖的名稱”)

Html.RenderPartial(“分部視圖的名稱”,??object模型數(shù)據(jù))

如何從服務(wù)器獲取一段json格式的字符串?

服務(wù)器的Action方法返回值類型為JsonResult,并且在方法內(nèi)部可以調(diào)用Controller.Json()輔助方法.

ASP.NET?MVC進(jìn)階四

ASP.NET?MVC中使用母版頁

ASPX視圖引擎的母版頁功能

Aspx視圖引擎中母版頁的用法,在webform模型和Mvc模型中,都是一樣的.

Aspx視圖有2個(gè)很重要的標(biāo)記:

asp:ContentPlaceHolder標(biāo)記

asp:Content標(biāo)記

asp:Content用于替換母版頁中的asp:ContentPlaceHolder.

在母版頁中應(yīng)該根據(jù)實(shí)際需要,定義多個(gè)asp:ContentPlaceHolder,而非默認(rèn)的2個(gè).

注意:在mvc中添加母版頁時(shí)一定要選擇MVC3視圖母版頁,而不能選擇下面的母版頁和嵌套的母版頁.

在MVC中,沒有提供嵌套的母版頁模版文件,需要用戶自行定義:

Razor視圖引擎

Razor視圖引擎的宗旨:將鍵盤的敲擊次數(shù)降到最低

Razor基本語法

定義變量:

輸出變量的值:

如何在頁面中原樣輸出@符號(hào)

如何在頁面中輸出hisageis5.

if-else的寫法:

for|foreach的寫法:

注意:如果在for循環(huán)中需要進(jìn)行條件判斷,不需要在if前加@符號(hào).

Html輔助方法的使用:

注意:@Html.TextBox()后面不能有分號(hào).

在razor視圖頁面中定義數(shù)據(jù)模型的類型信息:

在razor視圖頁面中加載分部視圖或加載其他action:

注意:@{}里面的分號(hào)不能省略.

在Razor視圖中如何生成form標(biāo)記:

Razor視圖引擎中母版頁的用法

Razor視圖中母版頁功能稱之為布局頁.

Razor視圖的布局頁文件名必須以下劃線_開頭.

Mvc項(xiàng)目中如何添加Razor布局頁:

Razor視圖中布局頁的默認(rèn)代碼如下:

@RenderBody的作用同aspx視圖中的asp:ContentPlaceHolder相似,用于加載內(nèi)容頁.

Razor視圖引擎中,如何讓內(nèi)容頁繼承布局頁?

在內(nèi)容頁中使用Layout屬性指定要繼承的布局頁.代碼如下:

其中ViewBag.Title是用于設(shè)置布局頁中的頁面title.

如果不需要內(nèi)容頁繼承布局頁,只需要將Layout屬性的值設(shè)置為null.

如果沒有將Layout設(shè)置為null,而是將其刪除掉,那么內(nèi)容頁仍然有可能會(huì)繼承一個(gè)默認(rèn)的布局頁.因?yàn)樵赩iews目錄中存在一個(gè)名稱為:_ViewStart.cshtml的文件,該文件是視圖的默認(rèn)配置文件,它里面設(shè)置了默認(rèn)的布局頁面,示例代碼如下:

嵌套的布局頁,在mvc中也沒有提供默認(rèn)的模版文件,需要用戶自行添加.

Html.RenderSection()

該輔助方法用于加載html片段.該段Html代碼可以是本頁面中定義的,也可以是內(nèi)容頁面中定義的.

示例代碼如下:

Razor視圖中如何自定義輔助方法

使用@helper來定義輔助方法.示例代碼如下:

在ASP.NET?MVC中如何實(shí)現(xiàn)模塊化開發(fā)?

對(duì)于一個(gè)系統(tǒng)而言,往往包含前臺(tái)和后臺(tái)兩大塊.比如,前后臺(tái)都包含用戶登錄功能,它們的控制器都叫Account,對(duì)應(yīng)的登錄方法也都叫Login,那么如何區(qū)分哪個(gè)是后臺(tái)的,哪個(gè)是前臺(tái)的???

ASP.NET?MVC在2.0中就添加了Area(區(qū)域)的功能,用來解決上面的問題.

通過Area功能可以將一個(gè)大的軟件項(xiàng)目劃分為N個(gè)功能模塊,每個(gè)功能模塊中都可以相同名稱的控制器和視圖文件.

首先,右擊項(xiàng)目,在彈出的右鍵菜單中選擇----添加----區(qū)域

ASP.NET?MVC數(shù)據(jù)分頁

Aspx視圖引擎和razor視圖引擎中如何實(shí)現(xiàn)分頁功能

主要使用了第三方的一個(gè)分頁控件MvcPager.dll

分頁功能分三步實(shí)現(xiàn):

第一步是在項(xiàng)目中導(dǎo)入MvcPager.dll,并導(dǎo)入相應(yīng)的命名空間:Webdiyer.WebControls.Mvc

第二步是在Action中組織要分頁的數(shù)據(jù)

第三步是在頁面中生成頁碼信息

注意:MvcPager.dll包括非ajax和ajax兩種使用模式.ajax模式下需要使用Ajax.Pager輔助方法.

其他

如何在頁面中加載靜態(tài)文件(圖片\css\js)?

使用Url.Content(“filePath”)方法.

Aspx視圖引擎

Razor視圖引擎

添加新的Area后,訪問報(bào)錯(cuò)的解決辦法:

修改Global.ashx文件中注冊的默認(rèn)路由

ASP.NET?MVC進(jìn)階五

重寫Controller類的虛方法

OnActionExecuting\OnActionExecuted

OnActionExecuting:該方法在執(zhí)行目標(biāo)Action之前被調(diào)用

OnActionExecuted:該方法在執(zhí)行目標(biāo)Action之后被調(diào)用

OnResultExecuting\OnResultExecuted

OnResultExecuting:該方法在執(zhí)行目標(biāo)視圖之前被調(diào)用

OnResultExecuted:該方法在執(zhí)行目標(biāo)視圖之后被調(diào)用

OnAuthorization

該方法用于驗(yàn)證用戶的授權(quán)信息.因此如果要進(jìn)行身份的驗(yàn)證,應(yīng)該在該方法中進(jìn)行.

OnException

當(dāng)訪問Action出現(xiàn)異常時(shí),該方法會(huì)自動(dòng)被調(diào)用.

下面的示例代碼演示了如何自動(dòng)捕獲系統(tǒng)異常,并將異常信息記錄到日志文件中.

ASP.NET?MVC中的過濾器

過濾器是指在用戶發(fā)送請求時(shí),MVC框架可以對(duì)用戶的請求進(jìn)行攔截,根據(jù)特定的條件對(duì)這些請求進(jìn)行篩選過濾.

ASP.NET?MVC中提供了下面幾種過濾器,他們的作用和上面將的重寫方法功能類似,但是這些過濾器是全局的,默認(rèn)對(duì)所有的Action請求都有效.

IAuthorizationFilter

授權(quán)過濾器

IActionFilter

行為過濾器

IResultFilter

結(jié)果過濾器

IExceptionFilter

異常過濾器

注意:過濾器需要在Global.asax文件中進(jìn)行注冊后方能起效.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末衅金,一起剝皮案震驚了整個(gè)濱河市噪伊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌典挑,老刑警劉巖酥宴,帶你破解...
    沈念sama閱讀 219,539評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異您觉,居然都是意外死亡拙寡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門琳水,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肆糕,“玉大人,你說我怎么就攤上這事在孝〕峡校” “怎么了?”我有些...
    開封第一講書人閱讀 165,871評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵私沮,是天一觀的道長始赎。 經(jīng)常有香客問我,道長仔燕,這世上最難降的妖魔是什么造垛? 我笑而不...
    開封第一講書人閱讀 58,963評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮晰搀,結(jié)果婚禮上五辽,老公的妹妹穿的比我還像新娘。我一直安慰自己外恕,他們只是感情好杆逗,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評(píng)論 6 393
  • 文/花漫 我一把揭開白布乡翅。 她就那樣靜靜地躺著,像睡著了一般罪郊。 火紅的嫁衣襯著肌膚如雪蠕蚜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,763評(píng)論 1 307
  • 那天排龄,我揣著相機(jī)與錄音波势,去河邊找鬼。 笑死橄维,一個(gè)胖子當(dāng)著我的面吹牛尺铣,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播争舞,決...
    沈念sama閱讀 40,468評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼凛忿,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了竞川?” 一聲冷哼從身側(cè)響起店溢,我...
    開封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎委乌,沒想到半個(gè)月后床牧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,850評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡遭贸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評(píng)論 3 338
  • 正文 我和宋清朗相戀三年戈咳,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片壕吹。...
    茶點(diǎn)故事閱讀 40,144評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡著蛙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出耳贬,到底是詐尸還是另有隱情踏堡,我是刑警寧澤,帶...
    沈念sama閱讀 35,823評(píng)論 5 346
  • 正文 年R本政府宣布咒劲,位于F島的核電站顷蟆,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏腐魂。R本人自食惡果不足惜慕的,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望挤渔。 院中可真熱鬧,春花似錦风题、人聲如沸判导。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽眼刃。三九已至绕辖,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間擂红,已是汗流浹背仪际。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留昵骤,地道東北人树碱。 一個(gè)月前我還...
    沈念sama閱讀 48,415評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像变秦,于是被迫代替她去往敵國和親成榜。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容