標籤:null 複雜 密碼 asp.net 模型 events string ase target
一、是什嗎?
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實現流程和原理。<喎?"/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+PGJyPgo8L3A+CjxwPjxwcmUgY2xhc3M9"brush:java;"> public class Login_BS { public bool Login(string username, string password) { if (username == "1" && password == "1") { return true; } else { return false; } } }
2)Controllers
然後在Controllers 檔案夾上右鍵,添加控制器
注意:其中Controller前面部分為改控制器被調用的名稱,也就是表單提交的地方為Login
其具體代碼如下:
123456789101112131415161718192021222324252627 |
<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
1234567891011121314151617181920212223 |
<span style= "font-family:KaiTi_GB2312;font-size:14px;" >View視圖代碼: @{ Layout = null ; } <title>Index</title> <div> <form action= "/Login" method= "post" > <p>使用者名稱:<input type= "text" name= "username" data-form-un= "1500271551930.9514" ></p> <p>密碼:<input type= "password" name= "password" data-form-pw= "1500271551930.9514" ></p> <p> <input type= "submit" value= "登陸" data-form-sbm= "1500271551930.9514" style= "pointer-events: auto;" ></p> </form> </div></span> |
4、自己理解
直接運行程式,我們會發現404頁面,為什麼明明有View視圖卻不顯示?其實,這涉及到MVC模式的具體分工問題。就像在DRP中Model2模式和同學討論的那樣:嚴格 model2模式(MVC)模式下JSP直接繪製好的頁面是不存在的?因為每個需要顯示的頁面,都必須經由一個servlet進行處理之後才由jsp進行繪製出來,也就是不訪問servlet,就不會有對應的jsp繪製好的Html頁面(純屬自己的理解,如有不同意見可以交流)。回到Asp.net 中,MVC中,使用者訪問的地址並不映射到伺服器中對應的檔案,而是映射到對應Control裡對應的ActionMethod,由ActionMethod來決定返回使用者什麼樣的資訊。而把使用者訪問的地址對應到對應的Action(當然也可以是對應的檔案)的工作有路由系統完成,這其中許多複雜的處理由.net自動完成,而開發人員需要告訴.net使用者的訪問地址和對應Action的具體映射關係。我們直接運行程式,並沒有映射到對應的Action方法,因此顯示404頁面也就很正常了。
如果我們想要顯示出具體頁面。需要再地址欄中加入對應的請求存取方法Action方法就可以了,也就是我們表單提交的地址/Login結果就可以出來了。
三、對比三層:
一個很明顯的區別:相對比與三層,MVC架構模式中,是沒有aspx.cs檔案的。這也是MVC模式極力避免的。因為如果頁面如果有代碼,就自然包含了邏輯,那麼就不是MVC了。在MVC裡面,視圖(View)顧名思義,只是顯示內容的一個載體,它自己要不要顯示,要顯示什麼內容,全部由控制器(Controller)決定。這樣最明顯的一個好處就是:實現View和Controllers的解耦。
另一個在於實現原理(流程)的不同:
一般aspx實現:
而MVC則是:
ASP.NET MVC架構模式