Có 3 cách truyền dữ liệu phổ biến từ Controller sang View.
- Sử dụng ViewBag
- Sử dụng ViewData
- Sử dụng Data Model.
Cách 1: Sử dụng ViewBag.
ViewBag trả về Dynamic Object nên không cần ép kiểu.
Trong Controller
public IActionResult Index()
{
var article = new List<Article>
{
new Article {Id=1,Title="Bidden",Content="This is Content 01",Author="KhanHTC"},
new Article {Id=2,Title="Bidden",Content="This is Content 02",Author="KhanHTC"},
new Article {Id=3,Title="Bidden",Content="This is Content 03",Author="KhanHTC"},
};
ViewBag.Article = article;
return View();
}
Trong View
@{
Layout = null;
var articles = ViewBag.Article;
}
<table class="table">
<tr>
<td>ID</td>
<td>Title</td>
<td>Content</td>
<td>Author</td>
</tr>
@foreach (var article in articles)
{
<tr>
<td>@article.Id</td>
<td>@article.Title</td>
<td>@article.Content</td>
<td>@article.Author</td>
</tr>
}
</table>
Cách 2: Sử dụng ViewData
ViewData là kiểu Dictionary, gồm key và value. Muốn sử dụng phải ép kiểu
Trong Controller
public IActionResult Index()
{
var article = new List<Article>
{
new Article {Id=1,Title="Bidden",Content="This is Content 01",Author="KhanHTC"},
new Article {Id=2,Title="Bidden",Content="This is Content 02",Author="KhanHTC"},
new Article {Id=3,Title="Bidden",Content="This is Content 03",Author="KhanHTC"},
};
ViewData["article"] = article;
return View();
}
Trong View
@{
Layout = null;
//Phải ép kiểu
var articles = ViewData["article"] as List<DemoNetCore01.Controllers.Article>;
}
<table class="table">
<tr>
<td>ID</td>
<td>Title</td>
<td>Content</td>
<td>Author</td>
</tr>
@foreach (var article in articles)
{
<tr>
<td>@article.Id</td>
<td>@article.Title</td>
<td>@article.Content</td>
<td>@article.Author</td>
</tr>
}
</table>
Cách 3: Sử dụng Data Model
Trong Controller
{
var article = new List<Article>
{
new Article {Id=1,Title="Bidden",Content="This is Content 01",Author="KhanHTC"},
new Article {Id=2,Title="Bidden",Content="This is Content 02",Author="KhanHTC"},
new Article {Id=3,Title="Bidden",Content="This is Content 03",Author="KhanHTC"},
};
return View(article);
}
Trong View
@model List<DemoNetCore01.Controllers.Article>
@{
Layout = null;
}
<table class="table">
<tr>
<td>ID</td>
<td>Title</td>
<td>Content</td>
<td>Author</td>
</tr>
@foreach (var article in Model)
{
<tr>
<td>@article.Id</td>
<td>@article.Title</td>
<td>@article.Content</td>
<td>@article.Author</td>
</tr>
}
</table>
Vậy cách nào tối ưu hoá nhất? Khi truyền dữ liệu nhỏ thì dùng ViewBag, ViewData, tuy nhiên khi truyền dữ liệu lớn nên dung Data Model
Không có nhận xét nào:
Đăng nhận xét