ASP.NET - MVC - ViewBag

ViewBag trong MVC ASP.NET

Là một DynamicViewData object, nó là một lớp bao bọc (wrap) ViewData để cho phép truy cập vào object một cách linh hoạt. ViewBag cũng cho phép chúng ta sử dụng dynamic properties (dùng dấu chấm thay vì ngoặc vuông như ViewData). Sử dụng ViewBag cũng tương tự như ViewData nhưng sẽ tiện lợi hơn vì nó không cần phải ép kiểu. 

Ví dụ sau minh họa cách chuyển dữ liệu từ controller sang view bằng ViewBag.

namespace MVC_BasicTutorials.Controllers
{
    public class StudentController : Controller
    {
        IList<Student> studentList = new List<Student>() { 
                    new Student(){ StudentID=1, StudentName="Steve", Age = 21 },
                    new Student(){ StudentID=2, StudentName="Bill", Age = 25 },
                    new Student(){ StudentID=3, StudentName="Ram", Age = 20 },
                    new Student(){ StudentID=4, StudentName="Ron", Age = 31 },
                    new Student(){ StudentID=5, StudentName="Rob", Age = 19 }
                };
        // GET: Student
        public ActionResult Index()
        {
            ViewBag.TotalStudents = studentList.Count();

            return View();
        }

    }
}

Trong ví dụ trên, chúng tôi muốn hiển thị tổng số sinh viên trong view. Vì vậy, đã gán số lượng sinh viên bằng ViewBag.TotalStudents = studentList.Count().
Bây giờ, trong view Index.cshtml, bạn có thể truy cập thuộc tính ViewBag.TotalStudents và hiển thị tổng số sinh viên như được hiển thị bên dưới.

<label>Total Students:</label>  @ViewBag.TotalStudents

Kết quả:

Total Students: 5

ViewBag không yêu cầu ép kiểu trong khi lấy các giá trị.

ViewBag là một lớpbao bọc xung quanh ViewData. Nó sẽ đưa ra một ngoại lệ thời gian chạy, nếu tên thuộc tính ViewBag khớp với khóa của ViewData.

 Những điểm cần nhớ :

  1. ViewBag truyền dữ liệu controller đếnview, dữ liệu tạm thời không chứa trong model.
  2. ViewBag là một thuộc tính động tận dụng các tính năng động mới trong C # 4.0
  3. Bạn có thể gán bất kỳ số lượng thuộc tính và giá trị nào cho ViewBag
  4. Vòng đời của ViewBag trong suốt một request hiện hành. Giá trị của Giá trị ViewBag sẽ là null nếu chuyển hướng xảy ra.
  5. ViewBag thực sự là một trình bao bọc xung quanh ViewData.