2010-07-26 10 views
13

Ich versuche Json meiner Ansicht ViewdataASP.NET MVC - Pass JSON-String to View Viewdata mit

mit

Controller zu übergeben

ViewData("JsonRegionList") = Json(RegionService.GetActiveRegions()) 

Ansicht

 $("input#UserRegion").autocomplete({ 
       source:"<%: ViewData("JsonRegionList").ToString %>", 
       minLength: 3, 

aber das Problem, in das ich renne, ist die Ausgabequelle sieht aus wie

 $("input#UserRegion").autocomplete({ 
       source:"System.Web.Mvc.JsonResult", 
       minLength: 3, 

was offensichtlich nicht richtig ist. Fehle ich etwas Grundlegendes?

Antwort

19

Die Json() - Controller-Methode gibt ein JsonResult zurück, das nicht mit einem JSON-String übereinstimmt. Das JsonResult enthält Daten, aber die Daten werden tatsächlich direkt in die Antwort geschrieben, wenn die View Engine JsonResult.ExecuteResult() aufruft. Das ist wahrscheinlich mehr Information, als Sie dort haben wollen - der Punkt ist, dass das Aufrufen von Json() in einem Controller Ihnen keine Zeichenfolge von JSON geben wird.

Wenn Sie nur Ihre Daten in eine JSON-String umwandeln möchten, können Sie die JavaScriptSerializer verwenden, das ist, was die Json() -Methode verwendet intern:

JavaScriptSerializer serializer = new JavaScriptSerializer(); 
ViewData["JsonRegionList"] = serializer.Serialize(jsonRegionList); 
+0

'JavaScriptSerializer' ist nicht definiert. Muss ich auf eine andere Baugruppe verweisen? –

+0

sieht so aus, als ob ich die Assembly System.Web.Extensions zu meinem Projekt hinzufügen müsste ... jetzt testen. –

+0

Der Namespace sollte 'System.Web.Script.Serialization' lauten und Sie würden Ihre 'RegionService.GetActiveRegions()' serialisieren – JustinStolle

Verwandte Themen