2011-06-24 40 views
8

Tôi đang theo dõi để gán giá trị cho ViewBag trong bộ điều khiển để sử dụng sau này trong Chế độ xem, Nó khiếu nại với lỗi sau.ViewBag- MVC3-ASP.NET

Gán giá trị trong Bộ điều khiển như thế này.

ViewBag["isAdmin"]=true; 

Lỗi:

Cannot apply indexing with [] to an expression of type 'System.Dynamic.DynamicObject' 

Có ai có này trước đây chưa?

+1

'ViewBag' thuộc loại' Động' nên bạn chỉ có thể sử dụng ký hiệu chấm. Tuy nhiên 'ViewData' là kiểu' Dictionary' (cũng ViewDataDictionary), vì vậy bạn phải sử dụng chỉ mục để chỉ định khóa. –

Trả lời

18

Tất cả những gì bạn cần là ViewBag.isAdmin = true. các bạn có thể truy cập là với

if(ViewBag.isAdmin) 
{ 
    //do stuff 
} 
9

Là một theo dõi, ý tưởng đằng sau ViewBag (và ViewData) là bạn có thể lưu trữ ra khỏi cặp khóa-giá trị của công cụ và thuận tiện truy cập chúng qua trong View.

Với ViewData, bạn tham khảo những điều như vậy:

ViewData["SomeKey"] = someObject; 

Nếu bạn muốn làm điều tương tự bằng cách sử dụng ViewBag để thay thế (trong đó cung cấp một gói xung quanh đó từ điển ViewData xây dựng và làm cho nó một chút ít tiết và dễ đọc hơn một chút) bạn tham khảo những điều như vậy:

ViewBag.isAdmin = true;

và có thể kiểm tra chúng, như tyrongower đã nêu ở trên, như vậy:

if (ViewBag.isAdmin) 
{ 
    // do stuff 
} 

Tôi thường sử dụng cú pháp ViewBag khi tôi sử dụng cấu trúc này, nhưng chúng thực sự tham chiếu đến cùng một nội dung. Vì vậy, nếu bạn đã làm một cái gì đó như vậy ngoài xem:

ViewData["isAdmin"] = true;

bạn có thể tham khảo nó như thế này, nếu bạn đã nghiêng như vậy:

ViewBag.isAdmin

hoặc ngược lại.

Chỉ cần thêm một chút chi tiết về khái niệm.

Các vấn đề liên quan