1. 程式人生 > >.Net MVC的學習(一)

.Net MVC的學習(一)

後綴 fonts mvc 存在 eth 大致 例如 pre gb2

  套種間作,也挺有意思的——近來學習感悟。DRP學習的同一時候,折騰了點曾經不曾學習可是卻非常多次耳聞過的東西——Asp.Net中的MVC架構模式。

一、是什麽?

  

  MVC,即(Model-View-Controller。模型—視圖—控制器模式)。和三層類似,用於表示一種軟件架構模式。在這樣的模式下,將系統的實現分為模型Model,視圖View控制器Controlller

當中Model:對數據庫的操作和一般的業務邏輯。

View:負責做出和用戶交互的顯示;Controller:處理RequestResponse請求,是View層訪問Model層的中介。

二、詳細實現

 

 通過一個詳細的樣例來看MVC的詳細實現

  首先:新建一個MVC 3 web應用程序


技術分享


 PSMVC3MVC4,我查閱了相關的資料,自己的理解是:在總體的架構和實現上沒有太大的變化。變化的僅僅是當中詳細的一個類或者接口等變化。

 由於其大致流程是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的學習(一)