1

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

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

我的控制器返回一个带有json对象的PartialView (“变量”是一个数据列表,例如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在我的浏览器中给了我一个错误(我假设当它点击“Id”的“I”时)。

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

4

1 回答 1

1

我发现了问题:

问题在于使用,JavaScriptSerializer().Serialize(foo)因为这是创建一个包含换行符和制表符的 JSON 对象,而不是用\nand替换它们\t

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

通过导入JSON.NET包并使用以下方法更正了此问题:

 var json = JsonConvert.SerializeObject(variables);

这传递了一个 JSON 对象,其中换行符和制表符替换为\n's 和\t's。然后可以使用以下方法访问视图:

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

最后在脚本中使用:

var variableList = $.parseJSON(mvcListOfVariablesInDB)

希望有一天这对其他人有所帮助...

于 2013-02-20T12:50:34.400 回答