Thứ Hai, 10 tháng 10, 2022

[.NET] Hướng dẫn truyền dữ liệu từ Controller sang View

 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