.Net MVC @model và @Model trên View – GÓC LẬP TRÌNH

Có  1 thắc mắc khi đưa dữ liệu ra view với người mới làm quen với .net MVC là việc sử dụng @model  lúc thấy có lúc không có.

Ví dụ: @model IEnumerable<Demo.Models.Theloaitin>

trong đó

@model có thể coi như kiểu dữ liệu để khai báo đối tượng (object), giống như khai báo Đối tượng SinhVien: SinhVien sv=new SinhVien(); Khi đó @model có ý nghĩa tương đương với SinhVien

@Model: là thể hiện của đối tượng @model. Nó giống như sv ở trên. Ta gọi đến các thuộc tính(attribute) của nó thông qua lời gọi: sv.hoten, sv.Tuoi …

IEnumerable: dữ liệu kiểu tập hợp

Demo.Models.Theloaitin: Trong ví dụ của tôi thì dự án tên là Demo, đối tượng(class) Theloaitin nằm trong Folder Model.

Tôi ví dụ từ ControllerTintuc sẽ truyền dữ liệu Tin tức sang View.

public ActionResult Index()
{
var t = db.Tintucs.ToList();
return View(t);
}

Trường Hợp 1: Không khai báo @model  

Kết quả hiển thị ra danh sách Tintuc và không bị lỗi gì bởi vì thực tế ở trên Action Index cua ControllerTintuc tôi đã truyển object Tintucs vào rồi. Và Object này đã được khai báo cho View ngay từ return View(t); 

Ở View chỉ cần gọi ra dùng.

@{
ViewBag.Title = “Index”;
Layout = “~/Views/Shared/_Layout.cshtml”;
}

<h2>Index</h2>

<p>
@Html.ActionLink(“Create New”, “Create”)
</p>
<table class=”table”>
<tr>
<th>
Loai
</th>
<th>
Tieu de tin
</th>
<th>
Noi dung tin
</th>
<th></th>
</tr>

@foreach (var item in Model) {
<tr>
<td>
@item.IDLoai
</td>
<td>
@item.Tieudetin
</td>
<td>
@item.Noidungtin
</td>
<td>
@Html.ActionLink(“Edit”, “Edit”, new { id=item.IdTin }) |
@Html.ActionLink(“Details”, “Details”, new { id=item.IdTin }) |
@Html.ActionLink(“Delete”, “Delete”, new { id=item.IdTin })
</td>
</tr>
}
</table>

Chú ý: ở noi dung tin (phần tô màu đỏ ở ví dụ trên) bạn viết @model.Noidungtin sẽ bị lỗi vì không thể truy cập đến thuộc tính thông qua gọi Kiểu dữ liệu. Và @Model.Noidungtin cũng bị lỗi bởi vì không thể truy cập đến thuộc tính trực tiếp từ đối tượng.

Trường Hợp 2: Khai báo @model  

@model IEnumerable<DemoThayPhet.Models.Tintuc>

@{
ViewBag.Title = “Index”;
Layout = “~/Views/Shared/_Layout.cshtml”;
}

<h2>Index</h2>

<p>
@Html.ActionLink(“Create New”, “Create”)
</p>
<table class=”table”>
<tr>
<th>
@Html.DisplayNameFor(model => model.IDLoai)
</th>
<th>
@Html.DisplayNameFor(model => model.Tieudetin)
</th>
<th>
@Html.DisplayNameFor(model => model.Noidungtin)
</th>
<th></th>
</tr>

@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.IDLoai)
</td>
<td>
@Html.DisplayFor(modelItem => item.Tieudetin)
</td>
<td>
@Html.DisplayFor(modelItem => item.Noidungtin)
</td>
<td>
@Html.ActionLink(“Edit”, “Edit”, new { id=item.IdTin }) |
@Html.ActionLink(“Details”, “Details”, new { id=item.IdTin }) |
@Html.ActionLink(“Delete”, “Delete”, new { id=item.IdTin })
</td>
</tr>
}

</table>

@Html.DisplayNameFor(model => model.Tieudetin): Lấy ra tên của thuộc tính

@Html.DisplayFor(modelItem => item.Tieudetin) : Lấy ra giá trị thuộc tính của đối tượng.

Giải thích:

@model IEnumerable<DemoThayPhet.Models.Tintuc> : ở đây ta tạo ra 1 đối tượng @model kiểu tập hợp. Như vậy đối tượng Model bây giờ là một đối tượng kiểu IEnumerable, nó là tập hợp đối tượng TinTuc. Việc của vòng foreach bên dưới chỉ đơn giản là duyệt qua 1 tập đối tượng TinTuc.Net MVC @model và @Model trên View.

@foreach (var item in Model)

{

@Html.DisplayFor(modelItem => item.Tieudetin)

}

 

Advertisement

Chia sẻ:

Thích bài này:

Thích

Đang tải…