一导匣、什么是MVC?
MVC 是一種使用 MVC(Model View Controller 模型-視圖-控制器)設(shè)計創(chuàng)建 Web 應(yīng)用程序的模式适荣。
MVC全名是Model View Controller巩步,是模型(model)-視圖(view)-控制器(controller)的縮寫峭弟, 一種軟件設(shè)計典范致开,用一種業(yè)務(wù)邏輯悼嫉、數(shù)據(jù)履怯、界面顯示分離的方法組織代碼回还,將業(yè)務(wù)邏輯聚集到一個部件里面,在改進(jìn)和個性化定制界面及用戶交互的同時叹洲,不需要重新編寫業(yè)務(wù)邏輯柠硕。MVC被獨特的發(fā)展起來用于映射傳統(tǒng)的輸入、處理和輸出功能在一個邏輯的圖形化用戶界面的結(jié)構(gòu)中运提。
Model(模型)是應(yīng)用程序中用于處理應(yīng)用程序數(shù)據(jù)邏輯的部分蝗柔。通常模型對象負(fù)責(zé)在數(shù)據(jù)庫中存取數(shù)據(jù)。 View(視圖)是應(yīng)用程序中處理數(shù)據(jù)顯示的部分民泵。通常視圖是依據(jù)模型數(shù)據(jù)創(chuàng)建的癣丧。 Controller(控制器)是應(yīng)用程序中處理用戶交互的部分。通痴蛔保控制器負(fù)責(zé)從視圖讀取數(shù)據(jù)胁编,控制用戶輸入厢钧,并向模型發(fā)送數(shù)據(jù)。
一-1嬉橙、認(rèn)識MVC框架的結(jié)構(gòu)
Model(模型)表示應(yīng)用程序核心(比如數(shù)據(jù)庫記錄列表)早直。 View(視圖)顯示數(shù)據(jù)(數(shù)據(jù)庫記錄)。 Controller(控制器)處理輸入(寫入數(shù)據(jù)庫記錄)市框。
MVC 模式同時提供了對 HTML莽鸿、CSS 和 JavaScript 的完全控制。
二拾给、什么是Model?(Model在MVC中所起的作用)
Model(模型)是應(yīng)用程序中用于處理應(yīng)用程序數(shù)據(jù)邏輯的部分。通常模型對象負(fù)責(zé)在數(shù)據(jù)庫中存取數(shù)據(jù)兔沃。?? ? ? 所有的模型應(yīng)該放到Models目錄下?
三蒋得、什么是view?及相關(guān)知識點
View(視圖)是應(yīng)用程序中處理數(shù)據(jù)顯示的部分。通常視圖是依據(jù)模型數(shù)據(jù)創(chuàng)建的乒疏。 所有的視圖文件都應(yīng)該放到Views目錄下. 如果在相應(yīng)的視圖目錄中沒有找到視圖文件,那么會尋找Views\Shared目錄下名稱相同的視圖文件 在ASPX視圖引擎中,可以使用asp服務(wù)器控件,但它的作用僅僅局限與生成html代碼,而不推薦開發(fā)人員使用asp控件的事件.因此建議開發(fā)人員手工編寫Html標(biāo)記额衙。 但是手寫Html標(biāo)記比較耗費時間,有沒有更好的解決方案?答案就是使用Html輔助方法。 Html輔助方法的作用就是通過調(diào)用C#方法的方式怕吴,快速的生成相應(yīng)的html標(biāo)記. Html輔助方法分為2大類:弱類型html輔助方法和強類型html輔助方法. 其中以For關(guān)鍵字結(jié)尾的都是強類型的輔助方法.下面的示例代碼演示了二者的調(diào)用方式窍侧,以及生成的html源碼。? ? ?? ? ?
附:常用Html輔助方法匯總
四转绷、什么是Controller?(Controller在mvc中所起的作用)
Controller(控制器)是應(yīng)用程序中處理用戶交互的部分伟件。通常控制器負(fù)責(zé)從視圖讀取數(shù)據(jù)议经,控制用戶輸入斧账,并向模型發(fā)送數(shù)據(jù)。 所有的控制器必須放到Controllers文件夾下煞肾; Controller必須為公開類咧织; 所有的控制器類名必須以Controller結(jié)尾; 所有的控制器類都應(yīng)該繼承Controller基類或?qū)崿F(xiàn)IController接口的類籍救; 在Action中return?view(),默認(rèn)會返回和Action名稱一樣的視圖文件. 在控制器類中的返回值為ActionResult的公開方法习绢,這些方法在MVC中稱為Action。
四-(1)蝙昙、Controller中的Action
Action用于響應(yīng)用戶的各種請求闪萄,比如向客戶端返回html文檔、html片段耸黑、json數(shù)據(jù)桃煎、純文本、文件等結(jié)果大刊。在ASP.NET?MVC中通過在Action(行為或操作)方法中返回ActionResult類型的對象來實現(xiàn)向客戶端響應(yīng)上面的各種結(jié)果为迈。
ActionResult類是個抽象類(抽象類無法直接被實例化). ActionResult有很多實現(xiàn)類三椿,不同的實現(xiàn)類用于響應(yīng)客戶端不同的結(jié)果。并且在Controller類中提供了大量的輔助方法,這些輔助方法可以快速的創(chuàng)建各種ActionResult. 下面是詳細(xì)介紹( ActionResult 的實現(xiàn)類)葫辐。
*ViewResult類 ViewResult類的作用是向客戶端響應(yīng)View目錄中一個視圖文件. Controller類中提供了View()方法搜锰,來快速的返回一個ViewResult類對象. 如:Return view (“index”); *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目錄的一個分部視圖文件蛋叼。分部視圖就是只包含html片段的視圖文件. 在Controller類中的輔助方法為:Controller.PartialView();
*FilePathResult類 該類用于實現(xiàn)文件下載. 在Controller類中的輔助方法為:Controller.File(string??filePath,??string??contentType,?string??fileName);
四—(2)、如何在Action中獲取表單提交的數(shù)據(jù)?
諸如新增\修改等功能模塊,我們往往會創(chuàng)建2個名稱相同的Action:一個action用于加載新增\修改頁面;另一個action用于處理新增\修改頁面提交的表單數(shù)據(jù).那么如何區(qū)分在何時調(diào)用哪個action呢? 每種操作都對應(yīng)兩個方法重載,其中前面第一個沒有特性前綴是HTTP GET模式訪問服務(wù)器的剂陡,而第二個帶有[HttpPost] attribute的方法是使用HTTP POST方式向服務(wù)器提交數(shù)據(jù)的狈涮。 第一個GET方法用來顯示初始化的界面,并處理客戶端驗證;這時如果用戶數(shù)據(jù)有誤,就根本不會進(jìn)入第二個POST方法鸭栖。 如果JS被瀏覽器禁用,第一個GET方法只用來顯示初始化界面歌馍,客戶端驗證失效,才會進(jìn)入第二個Post方法
表單中提交的數(shù)據(jù),可以通過Action的參數(shù)進(jìn)行映射. 映射的前提條件:Html標(biāo)記的name屬性值和action中參數(shù)的名稱要一致. 下面的示例代碼演示了映射的過程(注意粉色框標(biāo)記的部分):
我們還可以有另外一種等價的寫法,就是將映射的屬性定義到一個實體類中,這樣我們就可以在action中添加該實體類型的參數(shù),參考代碼如下所示:
小結(jié):MVC三大組件的相互關(guān)系
在控制器中可以直接調(diào)用視圖和模型
在視圖中可以調(diào)用模型晕鹊。
模型不能調(diào)用視圖松却。
模型能夠限定視圖中使用的數(shù)據(jù),但視圖中使用的模型應(yīng)由控制器提供。
在視圖中可以調(diào)用控制器(通過視圖中表單的提交和點擊超鏈接的方式調(diào)用)溅话。
有產(chǎn)品需要推廣晓锻,有軟件需要定制,有開發(fā)能力的程序員們歡迎加QQ群870859459互相交流學(xué)習(xí)飞几。同時進(jìn)群的群友需要軟件相關(guān)資源共享砚哆,資源整合,可以掃描群公告二維碼或者添加博主個人微信WJH20180512加微信群(蘇州軟件開發(fā)資源整合群)屑墨。