如何在javascript中从Razor模型对象获取JSON对象

问题描述 投票:0回答:6

在viewmodel对象中,以下是属性:

  public IList<CollegeInformationDTO> CollegeInformationlist { get; set; }

在VIEW中,javascript如下:

   var obj = JSON.stringify('@Model.CollegeInformationlist');
   alert(obj[1].State);  //NOT WORKING, giving string char

      $.each('@Model.CollegeInformationlist', function (i, item) {
    var obj = JSON.stringify(item);
    var r = $.parseJSON(obj);
    alert(r.State);    //just giving undefined.
    });

请指导我如何在 javascript 中获取 JSON 对象。

javascript asp.net json asp.net-mvc asp.net-mvc-5
6个回答
230
投票

您可以使用以下内容:

var json = @Html.Raw(Json.Encode(@Model.CollegeInformationlist));

这将输出以下内容(没有看到你的模型,我只包含一个字段,假设

@Model.CollegeInformationlist
[{"State":"a state</script>"}]
):

<script>
    var json = [{"State":"a state\x3C/script>"}];   
</script>

请注意,

Json.Encode()
将输入中的
"<"
字符替换为
"\x3C"
。它们在 JSON 中是等效的,但后者可以安全地注入 javascript 代码,而前者是 XSS 漏洞。

工作小提琴

AspNetCore

AspNetCore 使用

Json.Serialize
而不是
Json.Encode

var json = @Html.Raw(Json.Serialize(@Model.CollegeInformationlist));

MVC 5/6

您可以使用 Newtonsoft 来完成此操作:

    @Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(Model, 
Newtonsoft.Json.Formatting.Indented))

这使您可以更好地控制 json 格式,即如上所述的缩进、驼峰式等。


21
投票

在 ASP.NET Core 中,IJsonHelper.Serialize() 返回

IHtmlContent
,因此您无需通过调用
Html.Raw()
来包装它。

它应该像这样简单:

<script>
  var json = @Json.Serialize(Model.CollegeInformationlist);
</script>

4
投票

使用代码后

var json = @Html.Raw(Json.Encode(@Model.CollegeInformationlist));

您需要使用

JSON.parse(JSON.stringify(json))
;


2
投票

将对象从控制器传递到视图,将其转换为不编码的标记,并将其解析为 json。

@model IEnumerable<CollegeInformationDTO>

@section Scripts{
    <script>
          var jsArray = JSON.parse('@Html.Raw(Json.Encode(@Model))');
    </script>
}

1
投票

如果你想从你的模型中创建 json 对象,请像这样:

  foreach (var item in Persons)
   {
    var jsonObj=["FirstName":"@item.FirstName"]
   }

或者使用 Json.Net 从模型中生成 json :

string json = JsonConvert.SerializeObject(person);

0
投票

以下代码对我有用

var chartD =  JSON.parse(JSON.stringify([@Json.Serialize(@Model)]));
© www.soinside.com 2019 - 2024. All rights reserved.