如何从javascript中的Razor Model对象获取JSON对象


78

在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不知道您的CollegeInformationDTO类是什么样。在上一份工作中,我们在脚本中定义了一个与模型具有相同结构的对象,然后执行了一个jquery .map将模型映射到javascript对象。还要确保传递给视图的是JSON字符串
Matt Bodily 2014年

您需要将Model对象序列化为JSON。您应该创建一个返回结果的方法(或属性)。
musefan 2014年

能否请你分享一些东西给我。在这里,我var obj = JSON.stringify('@Model.CollegeInformationlist');这样写,它应该转换为JSON对象,并在显式写入.State属性时能够给出结果,但是它不能像一种方式一样工作。看起来,OBJECT被转换为字符串类型。
dsi

Answers:


170

您可以使用以下内容:

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

这将输出以下内容(没有看到您的模型,我仅包含一个字段):

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

工作小提琴

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格式,即如上所述缩进,驼峰包装等。


1
@Dhaval没问题。:)
hutchonoid

15
对于使用AspNetCore的任何人,请使用Json.Serialize代替Json.Encode
TrueWill

5
对于MVC 5/6的较新版本 @Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(Model, Newtonsoft.Json.Formatting.Indented))
达斯·维德勋爵(Lord Darth Vader)

1
@ R2D2在您的建议上增加了一个旋转:JsonConvert.SerializeObject(Model, Newtonsoft.Json.Formatting.Indented, new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver() })这也确保camelCase了序列化JSON的正确JavaScript CamelCase(或者我应该说)。
Al Dass

1
@ Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(Model,Newtonsoft.Json.Formatting.Indented))为我工作
smj


2

使用后代码var json = @Html.Raw(Json.Encode(@Model.CollegeInformationlist));

您需要使用JSON.parse(JSON.stringify(json))


小事情,但您应该在第二行设置代码段的格式。修改内容太小,因此我不允许这样做。
迈克尔(Michael)

你为什么会JSON.stringifyJSON.parse一个又一个地对?不需要它会浪费资源。
彼得·伊凡

有道理。如果没有JSON.stringify,我需要测试。我认为那JSON.parse(@Html.Raw(Json.Encode(@Model.CollegeInformationlist)))应该工作。有人可以测试并告知我们。但是现在我使用这种方式为我工作。
Frederico Martins

1

如果要从模型中创建json对象,请执行以下操作:

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

或者使用Json.Net从您的模型制作json:

string json = JsonConvert.SerializeObject(person);

1

将对象从控制器传递到视图,将其转换为标记而不进行编码,然后将其解析为json。

@model IEnumerable<CollegeInformationDTO>

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

为什么将结果包装在引号中,JSON.parse然后又接一个?不需要它会浪费资源。
彼得·伊凡
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.