2013-12-20 8 views
17

Wenn ich versuche, einen Wert an die ViewBag ich folgende Fehlermeldung erhalten zuweisen:Kann nicht anwenden Indizierung mit [], um einen Ausdruck des Typs ‚System.Dynamic.DynamicObject‘

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

Mein Code ist wie folgt:

public ActionResult Success() 
{ 
    ViewBag["SuccessBody"] = TempData["successBody"]; 
    return View(); 
} 

PS: Warum kann ich das fragen? Weil ich auf die Success-Aktion umgeleitet habe und etwas benötigt habe, das über Weiterleitungen hinweg besteht. Dann weise ich ViewBag den Wert zu, um den Wert an eine 'gemeinsame' Ansicht zu übergeben.

+0

Aber man kann nur TempData verwenden. Es wird für eine Weiterleitung überleben. – kaptan

+0

Ja, aber leider unterstützen gemeinsame Ansichten die TempData-Objekte nicht. – RealityDysfunction

+0

Welche Version von Visual Studio verwenden Sie, um diesen Code zu kompilieren? – JaredPar

Antwort

27

Haben Sie

versucht
ViewBag.SuccessBody = TempData["successBody"]; 
+0

Das war es! Danke mein Herr. – RealityDysfunction

+1

Warum können Sie einen Indexer nicht verwenden? –

+0

DynamicObjects stellen ihre untergeordneten Elemente nicht direkt als Array zur Verfügung. So wurde es entworfen. http://msdn.microsoft.com/en-us/library/system.dynamic.dynamicobject(v=vs.110).aspx – Slick86

16

ViewBag ist ein dynamisches Wrapper für Viewdata, so dass diese beiden Aussagen sind die gleichen:

ViewBag.SuccessBody = TempData["successBody"]; 
ViewData["SuccessBody"] = TempData["successBody"];