Як отримати об’єкт JSON з об’єкта Razor Model у javascript


81

У об'єкті viewmodel нижче знаходиться властивість:

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

У ПЕРЕГЛЯДІ 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.
    });

Ознайомтеся тут, як я можу отримати об’єкт JSON у javascript.


ваш javascript не знає, як виглядає ваш клас CollegeInformationDTO. На моєму останньому завданні ми визначили об’єкт у сценарії з тією ж структурою, що і модель, а потім виконали jquery .map, щоб зіставити модель із об’єктом javascript. Також переконайтеся, що те, що ви передаєте на вигляд, це рядок JSON
— Matt Bodily

Вам потрібно серіалізувати об’єкт Model до JSON. Вам слід створити метод (або властивість), який повертає цей результат.
— musefan

Не могли б ви поділитися мені з нею, щоб зробити це. тут я писав var obj = JSON.stringify('@Model.CollegeInformationlist');так, він повинен перетворитись на об'єкт JSON і мати можливість дати результат, коли явно пише .Stateвластивість, але це не працює як би. Здається, OBJECT перетворюється на тип рядка.
— dsi

Відповіді:


174

Ви можете використовувати наступне:

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

Це виведе наступне (не бачачи вашої моделі, я включив лише одне поле):

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

Робоча скрипка

AspNetCore

AspNetCore використовує Json.Serializeintead з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))
— лорд Дарт Вейдер

1
@ R2D2 - додатковий спін на вашу пропозицію: JsonConvert.SerializeObject(Model, Newtonsoft.Json.Formatting.Indented, new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver() })це також забезпечує належний JavaScript CamelCase (або я повинен сказати camelCase) для серіалізованого JSON.
— Al Dass,

1
@ Html.Raw (Newtonsoft.Json.JsonConvert.SerializeObject (Model, Newtonsoft.Json.Formatting.Indented)) спрацював для мене
— smj

9

В ASP.NET Core повертається IJsonHelper.Serialize (),IHtmlContent тому вам не потрібно обертати його викликом Html.Raw().

Це повинно бути настільки просто, як:

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

2

Після використання кодуvar json = @Html.Raw(Json.Encode(@Model.CollegeInformationlist));

Вам потрібно використовувати JSON.parse(JSON.stringify(json));


Невелика справа, але вам слід відформатувати сегмент коду у другому рядку. Це занадто мало для редагування, тому це не дозволить мені це зробити.
— Майкл

Чому ви JSON.stringifyі JSON.parseпоступаєтесь один за одним? Це не було б необхідним і даремно витратило б ресурси.
— Петро Іван

Мати сенс. Мені потрібен тест, якщо працює без JSON.stringify. Я думаю, що це просто JSON.parse(@Html.Raw(Json.Encode(@Model.CollegeInformationlist)))має спрацювати. Хтось може протестувати та повідомити нас. Але зараз я використовую цей спосіб і працюю на мене.
— Фредеріко Мартінс

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одне за одним? Це не було б необхідним і даремно витратило б ресурси.
— Петро Іван
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.