Which of the following statements is true regarding ViewBag and ViewData?

4 phương ánCó giải thích
Đề bài
// 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>

Các phương án trả lời

Chọn một phương án
Lời giảiChọn phương án để mở
Đáp án đúng: "Both ViewBag and ViewData are dynamically typed.". 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.

Cùng chương 4

Xuất hiện trong 1 bộ đề