VIEWBAG LÀ GÌ

  -  

ViewBag trong ASP..NET MVC

ViewBag là gì?

ViewBag vào ASPhường.NET MVC được thực hiện nhằm chuyển dữ liệu trong thời điểm tạm thời (không có vào model) từ controller thanh lịch view.

Bạn đang xem: Viewbag là gì

ViewBag là một trực thuộc tính hình trạng dynamic của lớp ControllerBase là lớp cơ sở của lớp Controller.

Hình sau minc họa ViewBag.

*

Trong hình bên trên, trực thuộc tính Name được gắn vào ViewBag với ký hiệu vết chnóng với gán quý hiếm chuỗi "Bill" đến nó trong controller. Thuộc tính này rất có thể được truy vấn vào view như sau
ViewBag.Name.

quý khách hàng rất có thể gán ngẫu nhiên số ở trong tính cùng quý giá làm sao đến ViewBag. Nếu các bạn gán cùng một tên nằm trong tính những lần mang lại ViewBag, thì nó vẫn chỉ chu đáo giá trị cuối cùng được gán cho trực thuộc tính.

Tips: quý khách hàng hoàn toàn có thể gán một đối tượng phong cách ngulặng tdiệt hoặc giao diện phức tạp làm cho cực hiếm đến nằm trong tính ViewBag.Ghi chú: ViewBag chỉ truyền dữ liệu tự controller sang trọng view, không gửi tài liệu ngược lại. Giá trị ViewBag đang là null nếu xảy ra chuyển hướng (redirect).

lấy ví dụ như sau minc họa bí quyết đưa tài liệu từ controller lịch sự view bởi ViewBag.

namespace MVC_BasicTutorials.Controllers public class StudentController : Controller IList studentList = new List() new Student() StudentID=1, StudentName="Steve", Age = 21 , new Student() StudentID=2, StudentName="Bill", Age = 25 , new Student() StudentID=3, StudentName="Ram", Age = trăng tròn , 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ụ bên trên, Cửa Hàng chúng tôi ý muốn hiển thị tổng thể sinch viên vào view. Vì vậy, công ty chúng tôi sẽ thêm quý hiếm của studentList.Count() đến trực thuộc tính TotalStudents của ViewBag.

Bây giờ đồng hồ, trong view Index.cshtml, chúng ta cũng có thể truy vấn thuộc tính ViewBag.TotalStudents, nhỏng được hiển thị dưới.

Total Students:
ViewBag.TotalStudentsĐầu ra:

Total Students: 5Trong thực tế, ViewBag là 1 trình phủ bọc xung quanh ViewData. Nó đã nỉm ra một nước ngoài lệ thời gian chạy ví như thương hiệu nằm trong tính ViewBag khớp cùng với khóa của ViewData.

Hạn chế của ViewBag

ViewBag không đòi hỏi nghiền loại trong khi truy vấn xuất những cực hiếm từ nó. Điều này rất có thể nỉm ra một nước ngoài lệ thời hạn chạy trường hợp thực hiện sai cách làm bên trên quý giá.ViewBag là đẳng cấp dynamic và làm lơ chất vấn kiểu dáng trên thời gian biên dịch. Vì vậy, thương hiệu trực thuộc tính ViewBag nên khớp vào controller cùng view Khi viết nó theo cách bằng tay.

ViewData trong ASP.NET MVC

Trong ASPhường.NET MVC, ViewData giống như như ViewBag, truyền dữ liệu từ bỏ Controller sang trọng View. ViewData gồm kiểu dáng Dictionary, trong khi ViewBag là hình trạng dynamic. Tuy nhiên, cả nhị đều lưu trữ tài liệu trong cùng một trường đoản cú điển nội cỗ.

ViewData là một từ điển, bởi vậy nó đựng các cặp khóa-quý hiếm trong số đó từng khóa đề xuất là 1 trong chuỗi.

Hình sau minc họa ViewData.

*
Ghi chú: ViewData chỉ gửi tài liệu từ bỏ controller sang trọng view mà lại chưa hẳn ngược lại. Nó chỉ tồn tại vào trải đời bây chừ.

Xem thêm: Hướng Dẫn Download File Apk Từ Google Play Trên Pc, Cách Tải File Apk Về Máy Tính Không Dùng Phần Mềm

lấy một ví dụ sau minh họa phương pháp đưa tài liệu trường đoản cú controller quý phái view bằng ViewData.

public ActionResult Index() IList studentList = new List(); studentList.Add(new Student() StudentName = "Bill" ); studentList.Add(new Student() StudentName = "Steve" ); studentList.Add(new Student() StudentName = "Ram" ); ViewData<"students"> = studentList; return View();Trong ví dụ trên, studentList được gán đến ViewData<"students"> với "students" là khóa cùng studentList là cực hiếm. Bây giờ bạn cũng có thể truy cập ViewData<"students"> trong view, nhỏng hình tiếp sau đây.


foreach (var std in ViewData<"students"> as IList)
std.StudentName Ở bên trên, chúng ta tầm nã xuất giá trị bằng phương pháp áp dụng ViewData<"students"> và nghiền kiểu dáng nó về một hình trạng tài liệu phù hợp. Quý khách hàng cũng có thể thêm các đối tượng người sử dụng KeyValuePair vào ViewData, nhỏng được hiển thị bên dưới.

public ActionResult Index() ViewData.Add("Id", 1); ViewData.Add(new KeyValuePair("Name", "Bill")); ViewData.Add(new KeyValuePair("Age", 20)); return View();ViewData với ViewBag hồ hết thực hiện cùng một tự điển trong nội cỗ. Vì vậy, bạn cấp thiết nhằm ViewData Key trùng với thương hiệu thuộc tính của ViewBag, còn nếu như không nó vẫn ném nhẹm ra một nước ngoài lệ cơ hội triển khai.

public ActionResult Index() ViewBag.Id = 1; ViewData.Add("Id", 1); // throw runtime exception as it already has "Id" key ViewData.Add(new KeyValuePair("Name", "Bill")); ViewData.Add(new KeyValuePair("Age", 20)); return View();

TempData vào ASPhường.NET MVC

TempData được sử dụng nhằm chuyển dữ liệu trường đoản cú view lịch sự controller, controller sang view hoặc từ thủ tục hành động này thanh lịch cách làm hành vi khác của và một controller hoặc một controller khác.

TempData tàng trữ dữ liệu tạm thời cùng auto xóa tài liệu đó sau khoản thời gian truy hỏi xuất cực hiếm.

TempData là 1 trong những thuộc tính trong lớp ControllerBase. Vì vậy, nó có sẵn vào bất kỳ controller hoặc view làm sao trong vận dụng ASP.NET MVC.

lấy ví dụ sau đây cho biết phương pháp đưa tài liệu từ bỏ phương thức hành động này lịch sự cách tiến hành hành vi khác bằng TempData.

public class HomeController : Controller public ActionResult Index() TempData<"name"> = "Bill"; return View(); public ActionResult About() string name; if(TempData.ContainsKey("name")) name = TempData<"name">.ToString(); // returns "Bill" return View(); public ActionResult Contact() //the following throws exception as TempData<"name"> is null //because we already accessed it in the About() action method //name = TempData<"name">.ToString(); return View(); Trong ví dụ bên trên, công ty chúng tôi sẽ thêm dữ liệu vào TempData trong thủ tục hành động Index() với truy vấn nó trong phương thức hành vi About(). Giả sử rằng người dùng vẫn truy vấn trang đầu tiên Index cùng kế tiếp cho trang About.

Phần sau đưa dữ liệu trường đoản cú cách tiến hành hành vi sang view.

public class HomeController : Controller public ActionResult Index() TempData<"name"> = "Bill"; return View(); public ActionResult About() //the following throws exception as TempData<"name"> is null //because we already accessed it in the Index.cshtml view //name = TempData<"name">.ToString(); return View(); public ActionResult Contact() //the following throws exception as TempData<"name"> is null //because we already accessed it in the Index.cshtml view //name = TempData<"name">.ToString(); return View(); Tại trên, bọn họ vẫn thêm tài liệu vào TempData trong cách tiến hành hành động Index(). Vì vậy, chúng ta cũng có thể truy vấn nó vào view Index.cshtml, như hình dưới đây. Bởi bởi vì họ sẽ truy vấn nó vào view Index trước, họ quan trọng truy vấn nó ngơi nghỉ ngẫu nhiên chỗ nào khác.


TempData<"name"> = "Steve";TempData sinh hoạt bên trên rất có thể được truy cập vào controller, nhỏng hình tiếp sau đây.

public class HomeController : Controller public ActionResult Index() return View(); public ActionResult About() if(TempData.ContainsKey("name")) name = TempData<"name">.ToString(); // returns "Bill" return View(); public ActionResult Contact() //the following throws exception as TempData<"name"> is null //because we already accessed it in the About() action method //name = TempData<"name">.ToString(); return View(); Mặc dù, TempData tự động hóa xóa khóa-cực hiếm sau khoản thời gian được truy vấn, các bạn vẫn hoàn toàn có thể duy trì nó cho kinh nghiệm tiếp theo sau bằng phương pháp call thủ tục TempData.Keep().

Xem thêm: Family Register Là Gì ? Thủ Tục Và Hướng Dẫn Sổ Hộ Khẩu Tiếng Anh Là Gì

ví dụ như dưới đây cho thấy giải pháp giữ gìn quý giá TempData cho những yên cầu tiếp sau trong cả lúc đang truy vấn nó.

public class HomeController : Controller public ActionResult Index() TempData<"name"> = "Bill"; return View(); public ActionResult About() string name; if(TempData.ContainsKey("name")) name = TempData<"name"> as string; TempData.Keep("name"); // Marks the specified key in the TempData for retention. //TempData.Keep(); // Marks all keys in the TempData for retention return View(); public ActionResult Contact() string name; if(TempData.ContainsKey("name")) data = TempData<"name"> as string; return View();

Những vấn đề cần lưu giữ về ViewBag, ViewData cùng TempData trong ASP.NET MVC

ViewBag chèn nội cỗ tài liệu vào tự điển ViewData. Vì vậy, khóa của ViewData với ở trong tính của ViewBag KHÔNG được trùng khớp.ViewBag chuyển dữ liệu tự Controller sang View, không phải ngược chở lại.ViewBag là 1 trong những nằm trong tính giao diện dynamic của lớp ControllerBase là lớp cửa hàng của lớp ControllerViewData chuyển tài liệu trường đoản cú Controller lịch sự View, chưa hẳn trở lại.ViewData là 1 trong những một số loại trường đoản cú điển.Tuổi thọ của ViewData chỉ kéo dài trong thời hạn trải nghiệm HTTP.. bây chừ. Giá trị ViewData có khả năng sẽ bị xóa nếu xảy ra chuyển hướng.Giá trị ViewData đề xuất được nghiền thứ hạng thành một thứ hạng tương thích trước lúc sử dụng nó.TempData được thực hiện nhằm gửi tài liệu tự view thanh lịch controller, controller thanh lịch view hoặc trường đoản cú cách làm hành động này sang trọng cách làm hành động không giống của cùng một controller hoặc một controller khác.TempData tàng trữ dữ liệu tạm thời cùng tự động xóa tài liệu đó sau khi truy xuất cực hiếm.TempData là 1 trong những các loại trường đoản cú điển.TempData tự động hóa xóa khóa-quý giá sau thời điểm được truy vấn, chúng ta có thể giữ lại nó mang lại hưởng thụ tiếp sau bằng phương pháp Gọi thủ tục TempData.Keep(). ASP..NET MVC