2010-07-26 42 views
13

我想要的Json傳遞到使用的ViewDataASP.NET MVC - 通JSON字符串查看使用的ViewData

控制器

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

觀點我查看

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

但我遇到的問題是輸出源看起來像

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

這顯然是不正確的。我缺少一些基本的東西嗎?

回答

19

Json()控制器方法返回一個JsonResult,它與JSON字符串不同。 JsonResult保存數據,但當View Engine調用JsonResult.ExecuteResult()時,數據實際上直接寫入響應。這可能比你想要的更多的信息 - 關鍵是在控制器中調用Json()不會給你一串JSON。

如果你只想把你的數據轉換成JSON字符串,你可以使用JavaScriptSerializer,這是什麼JSON()方法在內部使用:

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

'JavaScriptSerializer'沒有定義。我需要引用另一個程序集嗎? – 2010-07-26 05:05:23

+0

看起來好像我不得不將System.Web.Extensions程序集添加到我的項目中...現在進行測試。 – 2010-07-26 05:11:20

+0

命名空間應該是'System.Web.Script.Serialization',並且你會序列化你的'RegionService.GetActiveRegions()' – JustinStolle 2011-01-24 16:47:13