từ khóa @model
Ở trong một bài học trước đó, chúng ta đã biết rằng, controller có thể truyền dữ liệu đến view thông qua đối tượng ViewBag hoặc ViewData, tuy nhiên có một vấn đề khi sử dụng hai đối tượng này (tuy hai mà một) là ứng dụng sẽ không biết được các đối tượng có chứa những gì, và mã lệnh có đúng hay không cho đến khi ứng dụng chạy. Nếu lập trình sơ sót, khả năng sinh lỗi là rất cao.
ASP.NET MVC cũng cung cấp khả năng để truyền các đối tượng có kiểu rõ ràng cho view. Với cách thức như vậy, ứng dụng sẽ được kiểm tra kỹ càng trong thời gian biên dịch và đồng thời Visual Studio cũng sẽ kiểm tra tính đúng của model cho bạn bằng tính năng Intellisense. Chúng ta đang sử dụng model có kiểu mạnh với TaskControlller và view Index.cshtml.
Bằng cách sử dụng dòng @model bên trong tập tin view template, bạn có thể quy định kiểu của đối model mà view sẽ nhận được, lúc đó view sẽ hiểu model được nhận có kiểu gì. Khi xem dòng đầu
tiên của view Index.cshtml bạn sẽ thấy :
@model IEnumerable<ToDoApp.Models.Task>
Khai báo @model giúp cho view dễ dàng truy xuất đến danh sách tác vụ mà controller truyền đến thông qua thuộc tính Model của view. Nhờ vậy, trong Index.cshtml, chúng ta dễ dàng duyệt qua danh sách các tác vụ mà thuộc tính Model lưu giữ:
@foreach (var item in Model) { <tr> <td> @Html.DisplayFor(modelItem => item.Content) </td> <td> @Html.DisplayFor(modelItem => item.CreateDate) </td> <td> @Html.DisplayFor(modelItem => item.DueDate) </td> <td>
@Html.ActionLink("Edit", "Edit", new { id=item.Id }) |
@Html.ActionLink("Details", "Details", new { id=item.Id }) | @Html.ActionLink("Delete", "Delete", new { id=item.Id }) </td>
</tr>
}
Bởi vì đối tượng Model là đối tượng có kiểu mạnh (ở đây là kiểu IEnumerable<Task>), mỗi đối tượng item điều được định kiểu là Task. Điều đó có nghĩa là, VisualStudio với tính năng Intellisense sẽ hỗ trợ hiển thị các thuộc tính của đối tượng khi bạn sử dụng code editor (trình soạn thảo mã lệnh).