web-dev-qa-db-ja.com

JavaScriptでRazor ModelオブジェクトからJSONオブジェクトを取得する方法

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オブジェクトを取得する方法を説明してください。

54
dsi

次を使用できます。

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

これにより、次が出力されます(モデルが表示されることなく、1つのフィールドのみが含まれています)。

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

Working Fiddle

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の書式設定、つまり上記のインデント、キャメルケースなどをより細かく制御できます。

112
hutchonoid

使用後codevar json = @Html.Raw(Json.Encode(@Model.CollegeInformationlist));

使用する必要があるJSON.parse(JSON.stringify(json));

2

ASP.NET Coreでは、 IJsonHelper.Serialize()IHtmlContentを返すため、Html.Raw()への呼び出しでラップする必要はありません。

次のようにシンプルにする必要があります。

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

Yorモデルのjsonオブジェクトを次のようにしたい場合:

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

または、 Json.Net を使用して、モデルからjsonを作成します。

string json = JsonConvert.SerializeObject(person);
1
M.Azad

ビューからコントローラーにオブジェクトを渡し、エンコードせずにマークアップに変換し、jsonに解析します。

@model IEnumerable<CollegeInformationDTO>

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