Which of the following statements is true regarding ViewBag and ViewData? // Controller ViewData["Number"] = 123; // ViewData requires casting in the view. ViewBag.Text = "Hello"; // ViewBag does not require casting. //View <p>Number: @((int)ViewData["Number"])</p> <p>Text: @ViewBag.Text</p>

4 phương ánCó lời giảiXuất hiện trong 1 bộ đề

A·B·C·DCác phương án trả lời

AViewBag is strongly typed, while ViewData is dynamically typed.
BViewData is strongly typed, while ViewBag is dynamically typed.
CBoth ViewBag and ViewData are strongly typed.
Both ViewBag and ViewData are dynamically typed.Đúng

Giải thích chi tiết

Đáp án đúng: D. Cả ViewBag lẫn ViewData đều KHÔNG phải kiểu mạnh. ViewData là ViewDataDictionary, tức từ điển chuỗi - object, nên khi lấy ra phải ép kiểu như @((int)ViewData["Number"]) và lỗi ép kiểu chỉ lộ ra lúc chạy. ViewBag chỉ là lớp bọc dynamic quanh chính ViewData, nhờ dynamic mà viết @ViewBag.Text không cần ép kiểu nhưng cũng không được trình biên dịch kiểm tra. Vì vậy A, B và C đều sai khi gán nhãn "strongly typed" cho một trong hai. Muốn kiểu mạnh thì phải dùng view model với chỉ thị @model.

Xuất hiện trong các bộ đề