JavaScript의 Razor 모델 개체에서 JSON 개체를 가져 오는 방법


82

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.
    });

여기에서 자바 스크립트에서 JSON 객체를 얻는 방법을 안내하십시오.


당신의 자바 스크립트는 당신의 CollegeInformationDTO 클래스가 어떻게 생겼는지 모릅니다. 마지막 작업에서 우리는 모델과 동일한 구조로 스크립트에 객체를 정의한 다음 jquery .map을 수행하여 모델을 javascript 객체에 매핑했습니다. 또한 확실히 당신이보기에 전달하는 것은 JSON 문자열되어 있는지 확인
매트 신체

Model 객체를 JSON으로 직렬화해야합니다. 해당 결과를 반환하는 메서드 (또는 속성)를 만들어야합니다.
musefan 2014 년

이 작업을 수행하기 위해 몇 가지를 공유해 주시겠습니까? 여기, 나는 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.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 2014 년

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() })이것은 또한 camelCase직렬화 된 JSON에 대해 적절한 JavaScript CamelCase (또는 말해야합니다 )를 보장합니다 .
알 다스

1
@ Html.Raw (Newtonsoft.Json.JsonConvert.SerializeObject (Model, Newtonsoft.Json.Formatting.Indented)) 저를 위해 일했습니다
smj

9

ASP.NET Core에서 IJsonHelper.Serialize ()가 반환 IHtmlContent되므로 .NET 에 대한 호출로 래핑 할 필요가 없습니다 Html.Raw().

다음과 같이 간단해야합니다.

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

2

사용 후 코드var json = @Html.Raw(Json.Encode(@Model.CollegeInformationlist));

당신은 사용이 필요합니다 JSON.parse(JSON.stringify(json));


작지만 두 번째 줄에서 코드 세그먼트의 형식을 지정해야합니다. 편집이 너무 작아서 할 수 없습니다.
Michael

왜 당신 JSON.stringify과 차례로 JSON.parse옳은가요? 그것은 필요하지 않으며 자원을 낭비 할 것입니다.
Peter Ivan

말이 되세요. JSON.stringify없이 작동하는 경우 테스트가 필요합니다. 나는 그것이 효과가 있다고 생각합니다 JSON.parse(@Html.Raw(Json.Encode(@Model.CollegeInformationlist))). 누군가 테스트하여 알려줄 수 있습니다. 하지만 지금은 그 방법을 사용하고 저에게 일합니다.
Frederico Martins

1

yor 모델에서 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차례대로 포장 합니까? 그것은 필요하지 않으며 자원을 낭비 할 것입니다.
Peter Ivan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.