2010-07-26 35 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