大學畢業對MVC的概念還不是很清晰,總覺得MVC是和三層一樣的,是同一級別的架構。其實不然,三層架構是:BLL(業務邏輯層),DAL(資料庫訪問層),UI(頁面顯示層),而MVC僅僅是屬於三層架構UI層。可以說MVC就是為了更好的展示數據,如果把三層架構比作一個完整的人,那麼MVC就是這個人的臉,用 ...
大學畢業對MVC的概念還不是很清晰,總覺得MVC是和三層一樣的,是同一級別的架構。其實不然,三層架構是:BLL(業務邏輯層),DAL(資料庫訪問層),UI(頁面顯示層),而MVC僅僅是屬於三層架構UI層。可以說MVC就是為了更好的展示數據,如果把三層架構比作一個完整的人,那麼MVC就是這個人的臉,用來展示東西。說這麼多就是給剛接觸MVC的人從概念上明白MVC是個什麼東西,就是一種理念,一種展示數據的模式。
說到MVC不得不說很早以前拖拉控制項的時代,微軟開發了Windows系統讓小白就能接觸電腦這些高科技產品,使得普通用戶用圖形化界面替換掉以前Linux黑視窗的時代,不得不說微軟成功了。後來,微軟感覺把普通用戶變成小白不過癮,企圖把開發人員也變成小白,推出了WebForm,個人感覺這種想法很好,很超前,可能在很多年之後就沒有我們這些“程式員”了只有設計。但是放到現在還是不太現實,剛推出的時候感覺很新奇就研究了下,托拉拽感覺很爽,可是那時候使用WebForm的企業死的很慘,因為就頁面隱藏域藏得那些東西神仙都不知道是什麼鬼,並且性能也是差的不要不要的,結果很快的死了(從微軟剛發佈的.net core不支持WebForm就可以看出微軟放棄把程式員變成小白了)
言歸正傳,聊聊MVC把,M(model),V(view),C(control)。model是control和view之間通過實體傳輸數據,control返回一個視圖view可以通過model(實體)傳遞。view的強類型頁面就可以通過在control中的方法中return view(model) 來讓view可以通過Model來點出來要傳遞的數據。如果把model綁定到input的value上就會根據model有沒有數據來顯示要修改該的頁面。
在每一個action中都要有return一個繼承自JsonResult的對象,其中包括最常見的 ViewResult(return View())視圖、JsonResult(return Json())json字元串、ContentResult(return Content())原樣輸出 等。
control和view之間除了這種強類型傳遞數據之外還有另外三種方法來傳遞數據
如下所示:
1.使用ViewData傳遞數據
我們在Controller中定義如下(類型是ViewDataDictionary,可以看出這個方式適合傳遞鍵值對):
ViewData[“Message_ViewData”] = “ Hello ViewData!”;
然後在View中讀取Controller中定義的ViewData數據,代碼如下:
@Html.Encode(ViewData["Message_ViewData"])
js中讀取ViewData中數據如下:
<pre name="code" class="javascript"><script type="text/javascript"> var viewData = '@ViewData["Message_ViewData"]'; </script>
2.使用ViewBag傳遞數據
我們在Controller中定義如下(其類型是dynamic可以動態的添加其類型,結構也變得多樣化):
ViewBag.Message_ViewBag = “ Hello ViewBag !”;
然後在View中讀取Controller中定義的ViewBag數據,代碼如下:
@Html.Encode(ViewBag.Message_ViewBag)
js中讀取ViewBag中數據如下:
<script type="text/javascript"> var viewBag= '@ViewBag.Message_ViewBag'; </script>
3.使用TempData傳遞數據
我們在Controller中定義如下(其類型是TempDataDictionary,也是適合傳遞鍵值對,但是這種傳遞數據的方式有種特點,就是只能存在兩次http請求,只要取出來就會銷毀,經過研究發現其原來是把數據存到session中,取出一次後就會自動把session銷毀):
TempData[“Message”] = “Hello word!”;
然後在View中讀取Controller中定義的TempData數據,代碼如下:
@Html.Encode(TempData["Message_TempData"])
js中讀取TempData中數據如下:
<script type="text/javascript"> var tempData = '@TempData["Message"]'; </script>