[英]Passing (and parsing!) JSON objects through MVC4
我对于应该如何在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);
}
然后,My View通过创建以下变量使这些数据可用于我的脚本:
@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
在浏览器中出现了Uncaught SyntaxError: Unexpected token I
错误(我假设它命中“ Id”的“ I”)。
任何帮助,不胜感激,谢谢。
我发现了问题:
问题是使用JavaScriptSerializer().Serialize(foo)
因为这是创建一个包含换行符和制表符的JSON对象,而不是用\\n
和\\t
替换它们。
$.parseJSON()
无法处理换行符,因此会引发意外的令牌错误。
通过导入JSON.NET
包并使用,已更正了此JSON.NET
:
var json = JsonConvert.SerializeObject(variables);
这传递了一个JSON对象,其中用\\n
和\\t
替换了换行符和制表符。 然后可以使用以下方法使视图可访问该视图:
@model string
...
var mvcListOfVariablesInDB = '@Html.Raw(Json.Encode(Model))';
最后在脚本中使用:
var variableList = $.parseJSON(mvcListOfVariablesInDB)
希望有一天能对别人有帮助...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.