Як отримати об’єкт 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.