.Net MVC的學習(一)

來源:互聯網
上載者:User

標籤:style   blog   http   color   os   io   strong   檔案   

  套種間作,也挺有意思的——近來學習感悟。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中,使用者訪問的地址並不映射到伺服器中對應的檔案,而是映射到對應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互動?


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.