.Net MVC的學習(一)
套種間作,也挺有意思的——近來學習感悟。DRP學習的同一時候,折騰了點曾經不曾學習可是卻非常多次耳聞過的東西——Asp.Net中的MVC架構模式。
一、是什麽?
MVC,即(Model-View-Controller。模型—視圖—控制器模式)。和三層類似,用於表示一種軟件架構模式。在這樣的模式下,將系統的實現分為模型Model,視圖View,控制器Controlller。
當中Model:對數據庫的操作和一般的業務邏輯。
View:負責做出和用戶交互的顯示;Controller:處理Request和Response請求,是View層訪問Model層的中介。
二、詳細實現。
通過一個詳細的樣例來看MVC的詳細實現
首先:新建一個MVC 3 web應用程序
PS:MVC3和MVC4,我查閱了相關的資料,自己的理解是:在總體的架構和實現上沒有太大的變化。變化的僅僅是當中詳細的一個類或者接口等變化。
由於其大致流程是Request請求——→Controller——→Model然後返回給View進行顯示,所以從最底層開始實現。
1)Model
在Model目錄內建立一個Login_BS類。由於僅僅是簡單實現。所以並沒有進行對數據庫進行操作。僅僅是了解MVC實現流程和原理。
<span style="font-family:KaiTi_GB2312;"><span style="font-size:18px;"> </span><span style="font-size:14px;">public class Login_BS { public bool Login(string username, string password) { if (username == "1" && password == "1") { return true; } else { return false; } } } </span></span>
2)Controllers
然後在Controllers 目錄上右鍵,加入控制器
註意:當中Controller前面部分為改控制器被調用的名稱,也就是表單提交的地方為Login
其詳細代碼例如以下:
<span style="font-size:18px;"> </span><span style="font-family:KaiTi_GB2312;font-size:14px;">public class LoginController : Controller { // // GET: /Login/ public ActionResult Index() { return View(); } [AcceptVerbs(HttpVerbs.Post)]//表單提交方式 public void index(string username, string password) { Models.Login_BS loginbs = new Models.Login_BS(); //username = Request.QueryString["username"];這是get方式提交獲取數據 //password = Request.QueryString["password"]; if (loginbs.Login(username, password)) { Response.Write("登陸成功" + username); } else { Response.Write("登錄失敗" + username); } } }</span><span style="font-size:18px;"> </span>
然後在當中的Index()方法右鍵加入視圖
之後。在View目錄以下,會自己主動多出一個Login目錄。在Login文件以下,會有一個名稱為Index(加入視圖時自己取得名字)後綴名為cshtml的文件,這就是我們加入的控制器所相應的View視圖。
加入詳細的表單和控件:
詳細代碼例如以下:
3)View
<span style="font-family:KaiTi_GB2312;font-size:14px;">View視圖代碼: @{ Layout = null; } <!DOCTYPE html> <html> <head> <title>Index</title> </head> <body> <div> <form action="/Login" method="post"> <p>用戶名:<input type="text" name="username" /></p> <p>密碼:<input type="password" name="password" /></p> <p> <input type="submit" value="登陸" /></p> </form> </div> </body> </html> </span>
4、自己理解
直接執行程序,我們會發現404頁面,為什麽明明有View視圖卻不顯示?事實上,這涉及到MVC模式的詳細分工問題。就像在DRP中Model2模式和同學討論的那樣:嚴格 model2模式(MVC)模式下JSP直接繪制好的頁面是不存在的?由於每一個須要顯示的頁面,都必須經由一個servlet進行處理之後才由jsp進行繪制出來。也就是不訪問servlet,就不會有相應的jsp繪制好的Html頁面(純屬自己的理解。如有不允許見能夠交流)。回到Asp.net
中,MVC中,用戶訪問的地址並不映射到server中相應的文件,而是映射到相應Control裏相應的ActionMethod,由ActionMethod來決定返回用戶什麽樣的信息。而把用戶訪問的地址相應到相應的Action(當然也能夠是相應的文件)的工作有路由系統完畢,這當中很多復雜的處理由.net自己主動完畢,而開發人員須要告訴.net用戶的訪問地址和相應Action的詳細映射關系。我們直接執行程序,並沒有映射到相應的Action方法。因此顯示404頁面也就非常正常了。
假設我們想要顯示出詳細頁面。
須要再地址欄中增加相應的請求訪問方法Action方法就能夠了,也就是我們表單提交的地址/Login結果就能夠出來了。
三、對照三層:
一個非常明顯的差別:相對照與三層,MVC架構模式中,是沒有aspx.cs文件的。這也是MVC模式極力避免的。由於假設頁面假設有代碼。就自然包括了邏輯,那麽就不是MVC了。
在MVC裏面,視圖(View)顧名思義,僅僅是顯示內容的一個載體。它自己要不要顯示,要顯示什麽內容,所有由控制器(Controller)決定。
這樣最明顯的一個優點就是:實現View和Controllers的解耦。
還有一個在於實現原理(流程)的不同:
一般aspx實現:
而MVC則是:
保留一個問題:View是經過Controller的‘允許’和Model交互?還是View和Controller交互,而Controller和Model交互?
.Net MVC的學習(一)