MVC框架 - 檢視



正如最初的介紹章節中所看到的,檢視是與應用程式使用者介面相關的元件。這些檢視通常從模型資料繫結,並具有html、aspx、cshtml、vbhtml等副檔名。在我們的第一個MVC應用程式中,我們使用了檢視和控制器來向終端使用者顯示資料。為了將這些靜態和動態內容呈現到瀏覽器,MVC框架使用了檢視引擎。檢視引擎基本上是標記語法實現,負責將最終HTML呈現到瀏覽器。

MVC框架附帶兩個內建檢視引擎:

Razor引擎 - Razor是一種標記語法,它允許將伺服器端C#或VB程式碼嵌入網頁中。此伺服器端程式碼可用於在載入網頁時建立動態內容。與ASPX引擎相比,Razor是一個高階引擎,並在MVC的後續版本中推出。

ASPX引擎 - ASPX或Web窗體引擎是自一開始就包含在MVC框架中的預設檢視引擎。使用此引擎編寫程式碼類似於在ASP.NET Web窗體中編寫程式碼。

以下是比較Razor和ASPX引擎的小程式碼片段。

Razor

@Html.ActionLink("Create New", "UserAdd") 

ASPX

<% Html.ActionLink("SignUp", "SignUp") %> 

在這兩者中,Razor是一個高階檢視引擎,因為它具有緊湊的語法、測試驅動開發方法和更好的安全功能。我們將在所有示例中使用Razor引擎,因為它是最常用的檢視引擎。

這些檢視引擎可以編碼和實現為以下兩種型別:

  • 強型別
  • 動態型別

這些方法分別類似於早期繫結和後期繫結,其中模型將被強型別或動態繫結到檢視。

強型別檢視

為了理解這個概念,讓我們建立一個示例MVC應用程式(按照前面章節中的步驟),並新增一個名為ViewDemoController的控制器類檔案。

New View Controller

現在,將以下程式碼複製到控制器檔案中:

using System.Collections.Generic; 
using System.Web.Mvc;  

namespace ViewsInMVC.Controllers { 
   
   public class ViewDemoController : Controller { 
      
      public class Blog { 
         public string Name; 
         public string URL; 
      }  
      
      private readonly List topBlogs = new List { 
         new Blog { Name = "Joe Delage", URL = "http://tutorialspoint/joe/"}, 
         new Blog {Name = "Mark Dsouza", URL = "http://tutorialspoint/mark"}, 
         new Blog {Name = "Michael Shawn", URL = "http://tutorialspoint/michael"} 
      };  
      
      public ActionResult StonglyTypedIndex() { 
         return View(topBlogs); 
      }  
      
      public ActionResult IndexNotStonglyTyped() { 
         return View(topBlogs); 
      }   
   } 
}

在上面的程式碼中,我們定義了兩個操作方法:StronglyTypedIndexIndexNotStonglyTyped。我們現在將為這些操作方法新增檢視。

右鍵單擊StonglyTypedIndex操作方法,然後單擊“新增檢視”。在下一個視窗中,選中“建立強型別檢視”複選框。這還將啟用模型類和腳手架模板選項。從腳手架模板選項中選擇列表。單擊“新增”。

Add View Strongly Type

將建立一個類似於以下螢幕截圖的檢視檔案。正如您所注意到的,它在頂部包含了ViewDemoController的Blog模型類。您還將能夠在此方法中使用IntelliSense。

View Strongly Type Intellisense

動態型別檢視

要建立動態型別檢視,請右鍵單擊IndexNotStonglyTyped操作,然後單擊“新增檢視”。

Add View

這次,不要選中“建立強型別檢視”複選框。

View Index Not Strongly Type

生成的檢視將具有以下程式碼:

@model dynamic 
            
@{ 
   ViewBag.Title = "IndexNotStonglyTyped"; 
}

<h2>Index Not Stongly Typed</h2>  
<p> 
   <ul> 
      
      @foreach (var blog in Model) { 
         <li> 
            <a href = "@blog.URL">@blog.Name</a> 
         </li>    
      } 
   
   </ul> 
</p>

正如您在上面的程式碼中看到的,這次它不像前面那樣將Blog模型新增到檢視中。此外,您這次將無法使用IntelliSense,因為這次繫結將在執行時完成。

強型別檢視被認為是一種更好的方法,因為我們已經知道正在傳遞什麼資料作為模型,這與動態型別檢視不同,在動態型別檢視中,資料在執行時繫結,如果連結模型中的某些內容發生更改,可能會導致執行時錯誤。

廣告