Hỏi đáp

Chia sẻ kiến thức, cùng nhau phát triển

Phân biệt ViewBag ViewData và TempData

14:52 18-01-2018 6.077 lượt xem 2 bình luận 23:52 18-01-2018

của mấy chế

http://www.c-sharpcorner.com/blogs/viewdata-vs-viewbag-vs-tempdata-in-mvc13

 

Phiên bản gốc:

Introduction

ViewData and ViewBag are used for the same purpose --  to transfer data from controller to view.  ViewData is nothing but a dictionary of objects and it is accessible by string as key. ViewData is a property of controller that exposes an instance of the ViewDataDictionary class. ViewBag is very similar to ViewData. ViewBag is a dynamic property (dynamic keyword which is introduced in .net framework 4.0). ViewBag is able to set and get value dynamically and able to add any number of additional fields without converting it to strongly typed. ViewBag is just a wrapper around the ViewData.

ViewData Example

 

  1. //Controller Code  
  2. public ActionResult Index()  
  3. {  
  4.       List<string> Student = new List<string>();  
  5.       Student.Add("Jignesh");  
  6.       Student.Add("Tejas");  
  7.       Student.Add("Rakesh");  
  8.    
  9.       ViewData["Student"] = Student;  
  10.       return View();  
  11. }  
  12. //page code  
  13. <ul>  
  14.     <% foreach (var student in ViewData["Student"] as List<string>)  
  15.         { %>  
  16.     <li><%: student%></li>  
  17.     <% } %>  
  18. </ul>  

ViewBag Example

 

 

  1. //Controller Code  
  2. public ActionResult Index()  
  3. {  
  4.       List<string> Student = new List<string>();  
  5.       Student.Add("Jignesh");  
  6.       Student.Add("Tejas");  
  7.       Student.Add("Rakesh");  
  8.    
  9.       ViewBag.Student = Student;  
  10.       return View();  
  11. }   
  12. //page code  
  13. <ul>  
  14.     <% foreach (var student in ViewBag.Student)  
  15.         { %>  
  16.     <li><%: student%></li>  
  17.     <% } %>  
  18. </ul>  

TempData is a dictionary which is derived from TempDataDictionary class. TempData is stored data just like live session for short time. TempData keeps data for the time of HTTP Request, which means that it holds data between two consecutive requests. TempData helps us to transfer data between controllers or between actions. TempData internally use Session variables. Note that TempData is only work during the current and subsequent request. It is generally used to store one time messages. With the help of the TempData.Keep() method we can keep value in TempData object after request completion.

TempData Example

 

  1. //Controller Code  
  2. public ActionResult Index()  
  3. {  
  4.     List<string> Student = new List<string>();  
  5.     Student.Add("Jignesh");  
  6.     Student.Add("Tejas");  
  7.     Student.Add("Rakesh");  
  8.    
  9.     TempData["Student"] = Student;  
  10.     return View();  
  11. }  
  12. //page code  
  13. <ul>  
  14.     <% foreach (var student in TempData["Student"] as List<string>)  
  15.         { %>  
  16.     <li><%: student%></li>  
  17.     <% } %>  
  18. </ul>  

ViewData VS ViewBag VS TempData

ViewData

ViewBag

TempData

It is Key-Value Dictionary collection

It is a type object

It is Key-Value Dictionary collection

ViewData is a dictionary object and it is property of ControllerBase class

ViewBag is Dynamic property of ControllerBase class.

TempData is a dictionary object and it is property of controllerBase class.

ViewData is Faster than ViewBag

ViewBag is slower than ViewData

NA

ViewData is introduced in MVC 1.0 and available in MVC 1.0 and above

ViewBag is introduced in MVC 3.0 and available in MVC 3.0 and above

TempData is also introduced in MVC1.0 and available in MVC 1.0 and above.

ViewData also works with .net framework 3.5 and above

ViewBag only works with .net framework 4.0 and above

TempData also works with .net framework 3.5 and above

Type Conversion code is required while enumerating

In depth, ViewBag is used dynamic, so there is no need to type conversion while enumerating.

Type Conversion code is required while enumerating

Its value becomes null if redirection has occurred.

Same as ViewData

TempData is used to pass data between two consecutive requests.

It lies only during the current request.

Same as ViewData

TempData only works during the current and subsequent request

Conclusion

We have three options: ViewData, ViewBag and TeampData for passing data from controller to view and in next request. ViewData and ViewBag are almost similar and it helps us to transfer the data from controller to view whereas TempData also works during the current and subsequent requests.

Phiên bản tiếng việt

Giới thiệu

ViewData và ViewBag được sử dụng cho cùng một mục đích - để truyền dữ liệu từ bộ điều khiển để xem. ViewData là gì mà là một từ điển của các đối tượng và nó có thể truy cập bằng chuỗi như là chìa khóa. ViewData là một thuộc tính của bộ điều khiển để lộ một cá thể của lớp ViewDataDictionary. ViewBag rất giống với ViewData. ViewBag là một thuộc tính động (từ khóa động được giới thiệu trong .net framework 4.0). ViewBag có thể thiết lập và nhận giá trị động và có thể thêm bất kỳ số lượng các lĩnh vực bổ sung mà không chuyển đổi nó sang mạnh mẽ đánh máy. ViewBag chỉ là một lớp bao quanh ViewData.

Ví dụ về ViewData

    

Ví dụ về ViewBag
 

    // Bộ điều khiển Mã
    chỉ số ActionResult công khai ()
    {
          Danh sách <string> Student = new List <string> ();
          Student.Add ("Jignesh");
          Student.Add ("Tejas");
          Student.Add ("Rakesh");
       
          ViewBag.Student = Học sinh;
          trở lại View ();
    }
    // mã trang
    <ul>
        <% foreach (học sinh var trong ViewBag.Student)
            {%>
        <li> <%: student%> </ li>
        <%}%>
    </ ul>



TempData là một từ điển có nguồn gốc từ lớp TempDataDictionary. TempData được lưu trữ dữ liệu giống như phiên trực tuyến trong một thời gian ngắn. TempData giữ dữ liệu cho thời gian Yêu cầu HTTP, có nghĩa là nó giữ dữ liệu giữa hai yêu cầu liên tiếp. TempData giúp chúng ta truyền dữ liệu giữa các bộ điều khiển hoặc giữa các hành động. TempData sử dụng các biến Session. Lưu ý rằng TempData chỉ hoạt động trong yêu cầu hiện tại và tiếp theo. Nó thường được sử dụng để lưu trữ một thông báo thời gian. Với sự trợ giúp của phương thức TempData.Keep () chúng ta có thể giữ giá trị trong đối tượng TempData sau khi hoàn thành yêu cầu.

Ví dụ TempData
 

    // Bộ điều khiển Mã
    chỉ số ActionResult công khai ()
    {
        Danh sách <string> Student = new List <string> ();
        Student.Add ("Jignesh");
        Student.Add ("Tejas");
        Student.Add ("Rakesh");
       
        TempData ["Student"] = Học sinh;
        trở lại View ();
    }
    // mã trang
    <ul>
        <% foreach (var sinh viên trong TempData ["Student"] như Danh sách <string>)
            {%>
        <li> <%: student%> </ li>
        <%}%>
    </ ul>



ViewData VS ViewBag VS TempData

Xem dữ liệu


Xem túi


TempData

Đây là bộ sưu tập Từ điển Thu thập Giá trị


Nó là một đối tượng kiểu


Đây là bộ sưu tập Từ điển Thu thập Giá trị

ViewData là một đối tượng từ điển và nó là thuộc tính của lớp ControllerBase


ViewBag là thuộc tính động của lớp ControllerBase.


TempData là một đối tượng từ điển và nó là thuộc tính của lớp controllerBase.

ViewData nhanh hơn ViewBag


ViewBag chậm hơn ViewData


NA

ViewData được giới thiệu trong MVC 1.0 và có sẵn trong MVC 1.0 trở lên


ViewBag được giới thiệu trong MVC 3.0 và có sẵn trong MVC 3.0 trở lên


TempData cũng được giới thiệu trong MVC1.0 và có sẵn trong MVC 1.0 trở lên.

ViewData cũng làm việc với .net framework 3.5 trở lên


ViewBag chỉ hoạt động với .net framework 4.0 trở lên


TempData cũng làm việc với .net framework 3.5 trở lên

Loại chuyển đổi mã được yêu cầu trong khi liệt kê


Trong chiều sâu, ViewBag được sử dụng năng động, do đó, không cần phải chuyển đổi kiểu trong khi liệt kê.


Loại chuyển đổi mã được yêu cầu trong khi liệt kê

Giá trị của nó trở nên không có giá trị nếu chuyển hướng đã xảy ra.


Tương tự như ViewData


TempData được sử dụng để truyền dữ liệu giữa hai yêu cầu liên tiếp.

Nó chỉ nằm trong yêu cầu hiện tại.


Tương tự như ViewData


TempData chỉ làm việc trong yêu cầu hiện tại và tiếp theo

Phần kết luận

Chúng ta có ba lựa chọn: ViewData, ViewBag và TeampData để truyền dữ liệu từ bộ điều khiển để xem và trong yêu cầu tiếp theo. ViewData và ViewBag hầu như tương tự và nó giúp chúng ta chuyển dữ liệu từ bộ điều khiển để xem trong khi TempData cũng hoạt động trong các yêu cầu hiện tại và tiếp theo.

Bình luận

Để bình luận, bạn cần đăng nhập bằng tài khoản Howkteam.

Đăng nhập
Nguyễn Thái Hải đã bình luận 23:52 18-01-2018

Rất hay, đúng cái mình đang cần

K9 SuperAdmin, KquizAdmin, KquizAuthor đã bình luận 14:54 18-01-2018

cám ơn bạn nha. voet up cho bạn nè :3

Câu hỏi mới nhất