Có sự khác biệt về chức năng giữa ViewState trong Webforms và ViewBag trong MVC không? Họ dường như là "điều tương tự". Và có thể được sử dụng theo cùng một cách. Tôi hỏi vì MVC quảng bá Web không trạng thái và không nhồi nhét dữ liệu trong trang gây ra hiện tượng sưng lên và hiệu suất chậm hơn. Nhưng có vẻ như bạn cũng có thể làm điều đó trong MVC. Tất cả những gì họ làm, dường như chỉ là đặt tên mới cho nó.Sự khác biệt giữa viewbag và viewstate?
Trả lời
ViewState trong biểu mẫu web đã tuần tự hóa dữ liệu biểu mẫu thành trường ẩn, được mã hóa trong biểu mẫu, do đó dữ liệu có thể được ràng buộc lại trên postback.
ViewBag/ViewData là từ điển mà bạn có thể "nhồi" dữ liệu vào. Ví dụ, bạn có thể thêm vào nó trong Controller của bạn, sau đó truy cập nó trong View của bạn. Dữ liệu là dynamic
khiến việc làm việc với dữ liệu trở nên khó khăn. ViewBag không được gửi tới máy khách, nó là một phần của MVC (đường dẫn máy chủ).
Cả hai đều nên tránh.
ViewState bởi, tốt, không sử dụng và tìm cách giải quyết. Và ViewBag nên tránh bằng cách sử dụng ViewModels.
ViewBag không được gửi cho khách hàng (Trình duyệt). Nó hoàn toàn là một cái gì đó để sử dụng chuyển đổi từ bộ điều khiển để xem (đó là trước khi gửi lại cho khách hàng).
Trong MVC, nếu bạn nhận được một postback từ trang đó, sau đó bạn sẽ không khôi phục trạng thái của bạn, như Viewstate, trạng thái duy nhất bạn có là bất cứ điều gì bạn gửi cho trình duyệt, và bất cứ điều gì bạn gửi lại.
Viewstate được đăng lại cùng với nội dung của biểu mẫu tới máy chủ và do đó giá trị trong đó có sẵn trên bài đăng. Một viewbag chỉ giữ các giá trị trong nó cho đến khi trang được phục vụ sau đó ViewBag được lấy ra khỏi bộ nhớ. Vì vậy, bạn có thể sử dụng ViewState để giữ trạng thái giữa các cuộc gọi nhưng bạn không thể làm tương tự với một ViewBag.
ViewBag có địa điểm, ví dụ như sử dụng DropDownList và chuyển danh sách lựa chọn. Kiểm tra MVC Scaffolded CRUD - nó sử dụng ViewBag. Tuyên bố của bạn quá mạnh. Có lẽ, Chế độ xem được ưu tiên hơn ViewBag khi thích hợp. xem http://rachelappel.com/when-to-use-viewbag-viewdata-or-tempdata-in-asp.net-mvc-3-ứng dụng – RickAndMSFT
@ Rick.Anderson-at-Microsoft.com - đã đồng ý rằng tuyên bố của tôi có thể mạnh mẽ, nhưng không phải trong trường hợp của DropDownList. ViewModel của bạn có thể (và nên) có một thuộc tính cho 'SelectList', có thể được ràng buộc trong View của bạn. Hoàn toàn không cần có ViewBag ở đó. – RPM1984
Mã SelectList được tạo ra bởi công cụ ASP.NET MVC, và hầu hết mọi người đều cho rằng lựa chọn phù hợp cho một giàn giáo tự động. – RickAndMSFT