2010-07-26 8 views
13

Sto cercando di passare JSON per mio punto di vista utilizzando ViewdataASP.NET MVC - Passo JSON stringa da visualizzare utilizzando Viewdata

controller

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

vista

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

ma il problema che sto incontrando è la sorgente di output che assomiglia a

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

che ovviamente non è giusto. Mi manca qualcosa di base?

risposta

19

Procedimento regolatore JSON() restituisce un JsonResult, che non è la stessa come una stringa JSON. JsonResult conserva i dati, ma i dati vengono effettivamente scritti direttamente nella risposta quando il motore di visualizzazione chiama JsonResult.ExecuteResult(). Probabilmente sono molte più informazioni di quelle che vuoi - il punto è che chiamare Json() in un controller non ti darà una stringa di JSON.

Se si desidera solo per trasformare i dati in una stringa JSON, è possibile utilizzare il JavaScriptSerializer, che è ciò che il metodo JSON() utilizza internamente:

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

'JavaScriptSerializer' non è definito. Devo fare riferimento a un altro assieme? –

+0

sembra come se dovessi aggiungere l'assembly System.Web.Extensions al mio progetto ... testare ora. –

+0

Lo spazio dei nomi dovrebbe essere 'System.Web.Script.Serialization' e si dovrebbe serializzare 'RegionService.GetActiveRegions()' – JustinStolle