2011-06-24 22 views
8

Görünümde daha sonra kullanmak için denetleyicide ViewBag'a bir değer atamaktan vazgeçiyorum, Aşağıdaki hatayla şikayette bulunur.ViewBag- MVC3-ASP.NET

Kontrolördeki değeri bu şekilde atayın.

ViewBag["isAdmin"]=true; 

Hata:

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

Herkes önce bu vardı mı?

+1

'ViewBag',' Dynamic' türündendir, böylece nokta gösterimini kullanabilirsiniz. Ancak 'ViewData'' 'Dictionary' türündedir (iyi ViewDataDictionary), bu yüzden anahtarı belirtmek için indekslemeyi kullanmanız gerekir. –

cevap

18

Tek ihtiyacınız olan ViewBag.isAdmin = true. erişebileceğiniz bir devamı olarak

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

ile, ViewBag (ve ViewData) arkasındaki fikir şeyler anahtar-değer çiftlerini kapalı saklamak ve uygun görünümünde onları erişebilmenizdir.

ViewData ile, şöyle bunları başvuru:

ViewData["SomeKey"] = someObject; 

kullandığınız aynı şeyi istiyorsanız ViewData sözlüğü yapı bir sarma etrafında sağlar ve biraz daha az ayrıntılı ve yapar ViewBag yerine (

ViewBag.isAdmin = true;

ve tyrongower yukarıda belirtildiği gibi, onları kontrol şöyle edebilirsiniz: biraz daha okunabilir) bunu gibi şeyler başvuru

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

Genellikle bu yapıyı kullandığımda ViewBag sözdizimini kullanıyorum, ancak gerçekten aynı şeyleri kullanıyorlar. Bunu Görünüm dışında böyle birşey yaptığını Yani eğer:

ViewBag.isAdmin

veya tersi:

yani eğik olsaydı

ViewData["isAdmin"] = true;

Eğer böyle ona başvuru olabilir.

Konsept üzerinde biraz daha ayrıntı var.

İlgili konular