如何将 ASP.NET 视图模型中的 JSON 保存到 JavaScript 变量中?
Posted
技术标签:
【中文标题】如何将 ASP.NET 视图模型中的 JSON 保存到 JavaScript 变量中?【英文标题】:How to save JSON from an ASP.NET viewmodel into a JavaScript variable? 【发布时间】:2015-12-12 09:23:44 【问题描述】:我有一个加载视图模型的页面。在 viewmodel 中有一个包含 JSON blob 的属性:
public string PageJson get; set;
在视图中,我想将它存储到一个 javascript 变量中,所以我将它渲染为:
<script>
var _pageJson= JSON.parse('@html.Raw(Model.PageJson)');
</script>
我遇到的问题是这个 JSON blob 跨越多行,所以当我尝试将它分配给一个变量时,它给了我一个错误,就好像我试图分配一个这样的 JavaScript 变量:
var _pageJson = '
"PageCategories": [
"CategoryID": 4405958680,
"Description": "Advertising & Promotions"
,
//........code continues.........//
这当然会导致第一个括号之后的错误,因为没有结束引号和+
符号或\
符号的字符串不能跨越多行。 我怎样才能让 JavaScript 正确填充这个变量?我能想到的只是在控制器中 JSON 的每一行之后添加一个 \
,但这看起来非常荒谬。
【问题讨论】:
【参考方案1】:我认为这在过去对我有用,但我这里没有 Windows PC 来测试它。
您需要先对 JSON 值进行编码:
var yourModel = JSON.parse(@Html.Raw(Json.Encode(Model.PageJson)));
不需要引号,谢谢:@AlexeiLevenkov
【讨论】:
我刚试过。我确定@Html.Raw()
和JSON.parse()
是答案的一部分。这会将&quot;
转义字符转换为实际的"
字符,这很好。但是,它仍然会跨多行解析 JSON,因此我收到相同的错误。
@AlbatrossCafe JSON 周围不应该有引号......因为您知道它已经是 JSON。 (有更多正确实现的方法***.com/questions/4072762/…)
@AlbatrossCafe 感谢您的编辑。很高兴我能帮忙。
如果Model.PageJson
已经是JSON,则根本不需要JSON.parse
。只需简单地做var yourModel = @Html.Raw(Json.Encode(Model.PageJson));
@Rob 这是他在我编辑之前的原始答案。 @Html.Raw(Json.Encode(Model.PageJson))
似乎返回了一个字符串,例如:\r\n \"MarketplaceCategories\": [\r\n \r\n \"CategoryID\": 4405958689,..........
因此,为了删除所有换行符和转义符,我必须使用JSON .parse()
,现在它是一个正常的、可访问的 JS 对象以上是关于如何将 ASP.NET 视图模型中的 JSON 保存到 JavaScript 变量中?的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET MVC 视图需要将选定的下拉列表和日历日期传递给模型