通过MVC4传递(并解析!)JSON对象

时间:2013-02-20 10:15:12

标签: javascript asp.net-mvc json

我很困惑我应该如何在MVC中使用JSON对象以及它们应该如何从Controller传递到View,再到Jscript。

我也不确定我是否正确解析了正确点的JSON对象......

我的控制器正在返回带有 json 对象的 PartialView (“ Variables ”是一个数据列表例如 Id = 2012,Name = BillyJoel,Value =“£2,000”):

public ActionResult JavascriptConstants() {
    var variables = Service.Obtain<VariableService>().All().ToList();
    var json = new JavaScriptSerializer().Serialize(variables);
    return PartialView("JavascriptConstants", json);
}

我的查看然后通过创建此变量将此数据提供给我的脚本:

@model string
...
var mvcListOfVariablesInDB = '@Html.Raw(Json.Encode(Model))';

我的 Jscript文件然后访问数据并尝试提取信息和键值对,但似乎是将JSON解释为字符串:

var variableList = $.parseJSON(mvcListOfVariablesInDB);

for (var variable in variableList) {
    alert(variableList[variable]);
}

这只会返回"[{等警报,因为会显示字符串的每个字符。如何访问JSON对象的键值?

我已经尝试更改我的JS使用:

var variableList = $.parseJSON(mvcListOfVariablesInDB);

但这只是在我的浏览器中给我一个Uncaught SyntaxError: Unexpected token I错误(我假设它在点击“我”的“我”时出现。

非常感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:1)

我发现了这个问题:

问题是JavaScriptSerializer().Serialize(foo)的使用,因为这创建了一个包含换行符和标签的JSON对象,而不是用\n\t替换它们。

$.parseJSON()无法处理换行符,因此会引发意外的令牌错误。

通过导入 JSON.NET 包并使用:

更正了此问题
 var json = JsonConvert.SerializeObject(variables);

这传递了一个JSON对象,换行符和标签替换为\n\t。然后可以使用以下内容访问View:

@model string
...
var mvcListOfVariablesInDB = '@Html.Raw(Json.Encode(Model))';

最后在脚本中使用:

var variableList = $.parseJSON(mvcListOfVariablesInDB)

希望有一天能帮助别人......