如何将 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() 是答案的一部分。这会将&amp;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 - 如何在各种视图中保留模型

ASP.NET MVC 视图需要将选定的下拉列表和日历日期传递给模型

将多个模型传递给 ASP.NET MVC 中的视图

将模型传递给 ASP.NET Core MVC 中的视图

如何将 C# 属性指定给 ASP.NET MVC 中的 Json 对象?

如何从剃刀视图提交具有动态列表的模型中的列表? ASP.NET 核心 3.1