跟我一起學習ASP.NET 4.5 MVC4.0(二)

來源:互聯網
上載者:User

上一篇文章中(跟我一起學習ASP.NET 4.5 MVC4.0(一))我們基礎的瞭解了一下ASP.NET MVC4.0的一些比較簡單的改變,主要是想對於MVC3.0來說的。因為這一些列主要是要給ASP.NET MVC初學者,或者還沒有使用過MVC的ASP.NET開發人員進行培訓學習,當然也可以讓我溫習一下這種開發模式。所以本篇不得不講解一下Razor的一些文法,以及在ASP.NET MVC開發中的一些技巧和開發方法。由於我在開發中不喜歡使用Entity Framework,所以這裡我需要解釋一下我認為的三層架構和MVC開發模式的應用。本人開發的三層架構中,資料庫層和邏輯層基本不變,唯一改變的是UI層換成了MVC模式開發。當然,模型執行個體如果有需要會重新寫,否則就會直接使用實體類進行替代,這隻是我個人認識說不定是不正確的,希望各位大師能夠多多指教。

 

首先我們來瞭解一下Razor的文法,在VS2010或者VS11中,添加一個試圖就會讓你選擇使用Razor(cshtml)還是C#(ASPX)格式。Razor在文法上的美化是顯而易見的,但是有時候會出現一些莫名其妙的錯誤,但是一般都可以得到解決,要麼加HTML標籤,要麼是有“()”等等都可以得到解決,這個也許是在編寫的Text Template對我們所寫的文本解析有點問題而已。

 

在Razor中使用“@”來替代“<%%>”的編碼格式,當然如果需要代碼塊,就需要用到“@{}”。在其中就可以編寫C#代碼,配合VS的只能解析,一般有過開發經驗的人都可以很容易上手。如果你想瞭解更多的文法相關問題,可以參考MVC3 Razor視圖引擎的基礎文法,下面介紹一下在MVC中很重要的幾個關鍵字,在編程過程中會經常使用到。

 

一、@model模型定義

 使用@model關鍵字可以定義一個Action裡所對應的一個模型(經常可以叫他實體類),其實是對動態變數進行執行個體化,這樣就可以直接在cshtml檔案中調用“Model”變數。而這個模型的執行個體,需要通過Controller進行傳輸,如果沒有則“Model”將為null。

 

 模型可以是一個實體類,也可以是一個列表執行個體,字典對象都可以進行定義,但是和Controller中的Action傳回來的執行個體一定要一樣,否則將會出現錯誤。例如我們擷取使用者執行個體,並且在頁面上呈現使用者的具體資訊,這樣就可以將使用者執行個體返回給前台cshtml頁面,具體代碼如下。

  1 /// <summary>

 2         /// 擷取使用者資訊。
 3         /// </summary>
 4         /// <returns>返回行為結果。</returns>
 5         public ActionResult UserInfo()
 6         {
 7             var id = Convert.ToInt32(Request.QueryString["id"] ?? "0");
 8             var user = Users.GetUser(id);
 9             return View(user);
10         }

只要在cshtml頁面上定義“@model User”這樣這個頁面的基本模型(Model)就是這個User類了,當然如果不為空白的時候就可以直接調用了。

 

 二、@section節點關鍵字

 這裡首先需要瞭解一下布局頁面,在ASP.NET MVC中約定,以“_”開頭的檔案在瀏覽器上面是不能訪問的,而“Shared”檔案夾是一個共用的檔案夾,或者叫做通用檔案夾。一般不可以定義一個SharedController,這個我沒試過,有興趣你可以試試。而“_viewstart.cshtml”裡所指定的檔案就是布局頁面,相當於ASP.NET裡的Master頁面,這樣講應該會比較好瞭解。每一個布局頁都必須調用一個方法“@RenderBody()”,而這個@section就有點像placeholder一樣,所知名的塊名稱需要和布局頁裡面定義的名稱一樣。

 

 上面就可以很清楚的看到,其中required參數表示在子頁面中是否一定要重寫,一般不需要所以設定為false。如果是true表示所有布局頁的字頁面都必須要有這個節點重現的代碼塊,在子頁面中調用可以從下面的圖中看到。

 

 由於@section header設定了required:false,所以不重寫沒關係,忽略他。節點一般使用“{}”包裹,而下面部分沒有指定的就是Body部分了,用好布局頁可以減少很多代碼,這個是值得推薦的。

 

三、@helper方法定義

 使用@helper關鍵字可以定義一個方法,這樣就可以在頁面中調用這個方法了,和C#中的方法一樣。在頁面中定義的方法可以訪問ViewBag,HttpContext等等頁面的屬性,返回的類型為“HelperResult”。其他的寫法和普通的方法沒有區別,主要用於列表等等需要重複寫進行可重複調用。

 

這個關鍵字還可以在App_Code檔案夾中定義很多個方法集,我最常用的就是定義分頁,比如只需要傳入記錄數,每頁顯示的記錄數,以及當前頁碼和URL格式化參數,就可以在頁面中很簡單的呈現分頁內容。之所以推薦在App_Code這個檔案夾中定義,是因為可以省略命名空間,檔案名稱就是類名,而定義的方法就可以直接使用“FileName.MethodName”格式調用,即靜態方法類。所以在這裡定義的方法,不能夠使用頁面上面的ViewBag等等屬性。

 

用好了以上三個關鍵字不僅對MVC有一個深刻的認識,也可以使得提高編碼重用度。下面我再介紹一下ASP.NET MVC中檔案夾結構和MVC中的對應關係,這個對於初學者來說是個很大的問題,因為我發現剛剛進行開發的人員找不到頁面,找到頁面又找不到控制器。藉助VS11這種檔案顯示結構,會更好理解,如所示。

 

從就可以很好的理解,Models-Views-Controllers這就組成了MVC,在Models中一般定義一些模型實體,並且會添加一些驗證,這些模型實體類供控制器Controllers中的方法調用。在Controllers中定義的類型和Views檔案夾下的檔案夾名稱相對應,檔案夾名加上“Controller”就是控制器名稱,這是一種命名規範就像Attribute一樣。而其中的方法當然對於的就是Views下檔案夾下的檔案名稱了,這些都是一一對應的。當然有些控制器返回的如果不是試圖,可以不需要定義這些檔案名稱,但是如果是返回試圖,就會出現找不到cshtml頁面的錯誤。

 

註:控制器的這種命名規範只是對於Internet Application,對於WebAPI這個就不一樣了。 

 

昨天所寫和今天所講都是比較基礎的,學習都需要通過循序漸進,這樣才可以慢慢進入正題,我希望我所寫的能夠給他人帶來一點收穫。我沒有整體規劃一下寫作的內容,經常都是想到什麼寫什麼,所以可能會給初學者帶來不好的感覺,敬請原諒。 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.