2011-06-24 11 views
8

मैं दृश्य में बाद में उपयोग के लिए नियंत्रक में व्यूबैग को मान निर्दिष्ट करने के लिए प्रयास कर रहा हूं, यह निम्न त्रुटि के साथ शिकायत करता है।व्यूबैग- MVC3-ASP.NET

इस तरह नियंत्रक में मान असाइन करना।

ViewBag["isAdmin"]=true; 

त्रुटि:

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

किसी को भी करने से पहले इस था करता है?

+1

'व्यूबैग' प्रकार 'गतिशील' प्रकार है ताकि आप केवल डॉट नोटेशन का उपयोग कर सकें। हालांकि 'व्यूडाटा' प्रकार 'डिक्शनरी' (अच्छी तरह से ViewDataDictionary) है, इसलिए आपको कुंजी निर्दिष्ट करने के लिए अनुक्रमण का उपयोग करना होगा। –

उत्तर

18

आपको केवल ViewBag.isAdmin = true की आवश्यकता है। आप उपयोग कर सकते हैं

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

एक अनुवर्ती के रूप में साथ है, ViewBag (और ViewData) के पीछे विचार यह है कि आप सामान की कुंजी-मान जोड़ों बंद की दुकान और आसानी से दृश्य में उन पर पहुंच सकते हैं।

ViewData के साथ, आप तो जैसे इन बातों का संदर्भ:

ViewData["SomeKey"] = someObject; 

आप उपयोग कर भी ऐसा ही चाहते हैं बजाय ViewBag (जो कि ViewData शब्दकोश निर्माण एक रैपिंग के आसपास प्रदान करता है और यह थोड़ा कम वर्बोज़ और बनाता है थोड़ा अधिक पठनीय) तुम इतनी तरह बातें संदर्भ:

ViewBag.isAdmin = true;

और, उन्हें जांच कर सकते हैं के रूप में tyrongower ऊपर कहा गया है, इसलिए जैसे:

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

मैं आमतौर पर व्यूबैग वाक्यविन्यास का उपयोग करता हूं जब मैं इस निर्माण का उपयोग करता हूं, लेकिन वे वास्तव में एक ही सामान का संदर्भ देते हैं। तो अगर आप ऐसा दृश्य बाहर की तरह कुछ किया:

ViewData["isAdmin"] = true;

आप इसे इस तरह का संदर्भ सकता है, यदि आप ऐसा इच्छुक थे:

ViewBag.isAdmin

या इसके विपरीत।

अवधारणा पर बस थोड़ा और विस्तार।

संबंधित मुद्दे