我很困惑我应该如何在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
错误(我假设它在点击“我”的“我”时出现。
非常感谢任何帮助,谢谢。
答案 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)
希望有一天能帮助别人......