2017-10-12 12 views
1

잘못된 형식 또는 맞춤법을 사용하지 못해 죄송합니다. 나는이 게시물을 서둘러 writting 오전. :)Json 데이터를 MVC 컨트롤러에 전달 - 액션 메서드의 JObject 매개 변수

간단한 컨트롤러 (MVC 컨트롤러)의 동작 방식에 json 데이터를 전달하고 있습니다. 다음은 참조 용 샘플 코드입니다.

JS 코드 :

var에 JSON = {IsInit : 사실, SearchParam : {유형 : "XX"이름 : "XX"정렬 ""}};

Nx$(document).ready(function() { 

     Nx$.ajax({ 
      async: true, 
      contentType: "application/json; charset=utf-8", 
      type: "POST", 
      url: "Home/Data", 
      dataType: "json", 
      data: JSON.stringify(json), 
      success: function (msg) { 
       alert('success'); 
      }, 
      error: function (jqxhr, textStatus, error) { 
       alert('fail'); 
      } 
     }); 

작업 방법 :

<HttpPost> 
     <Route("Data")> 
     Function GetData(ByVal IsInit As Boolean, ByVal SearchParam As Newtonsoft.Json.Linq.JObject) As ActionResult 
      Return Nothing 
     End Function 

이제, 액션 위의 모든 호출하지 않습니다. 하지만 아래 코드를 사용하면 호출이되지만 SearchParam은 [object] 유형이므로 searchParam 객체의 값을 사용할 수 없습니다.

<HttpPost> 
    <Route("Data")> 
    Public Function GetData(ByVal IsInit As Boolean, ByVal SearchParam As Object) As Object 
     Return Nothing 
    End Function 

복잡한 json 개체의 POST 요청에서 여러 매개 변수를 전달할 수 없다고 생각합니다.

JSON 데이터를 MVC 컨트롤러의 동작 메서드에 전달하여 SearchParam Json 데이터가 JObject로 변환되도록하는 방법은 무엇입니까? 초기의 제 1 액션 메소드 서명은 주요한 메소드 서명 변경없이 사용되어야한다.

거의 관측 : 나 API 제어기 API로서 동작 방법 이상으로하면

  1. ; 그것은 일을 시작하지만 아래의 메소드 서명을 따라야한다고 말하고 있습니다. 아래의 접근 방식은 MVC 컨트롤러에서 작동하지 않습니다. 이유를 모른다? 그러나, 어떤 이유로; API 컨트롤러를 사용할 수 없습니다.

    <HttpPost> 
        <Route("Data")> 
        Function GetData(ByVal req As Newtonsoft.Json.Linq.JObject) As ActionResult 
         Return Nothing 
        End Function 
    

감사합니다!

+0

데이터 : JSON.stringify (json), 데이터를 문자열로 변환 중입니다. 나는 아약스 매개 변수 –

답변

2

이 용도로 JOBject를 사용하지 않는 것이 좋습니다. 대신 모델 클래스을 만들고 사용하는 것이 훨씬 실용적이고 강력하게 권장됩니다. 그런 다음 MVC 웹 API는 들어오는 JSON을 Model 객체에 바인딩합니다. 모두 무료입니다.

예 : 여기에 내가 하나 개의 클래스에 모든 것을 쌓여

Public Class MyData 
    Public Property IsInit As Boolean 
    Public Property Type As String 
    Public Property Name As String 
    Public Property Sort As String 
End Class 

참고. 당신이 나머지에서 IsInit 분리를 유지하려는 경우에 당신은 이런 식으로 분할 할 수 있습니다 :

Public Class Param 
    Public Property Type As String 
    Public Property Name As String 
    Public Property Sort As String 
End Class 

Public Class MyData 
    Public Property IsInit As Boolean 
    Public Property SearchParam as Param 
End Class 

는 다음과 같이 액션 방법을 변경

Function GetData(<FromBody()> ByVal data As MyData) As ActionResult 
    ... 
End Function 

마지막으로 당신은 아마에서 data: json를 사용하셔야합니다 전화하므로 JSON.stringify()으로 전화하지 마십시오.

+0

에있는 "json"데이터 유형을 제거하는 것이 좋습니다. Peter. 그것은 내가 찾고 있던 것에 가깝다. – user2761594

0

Thanks Peter !! 귀하의 의견은 저에게 방향을 알려주었습니다. JSON 데이터를 사전 객체로 래핑하는 데 사용되는 아래 코드 스 니펫.여기에 JObject를 사용하지 않고 대신 Model 객체를 사용한다는 점을 이해합니다. 그러나 웬일인지. JSON을 다른 끝점에서 동적 JSON 특성으로 인해 가져 오기 위해 사전 개체를 사용해야합니다.

Public Class MyData 
      Public Property IsInit As Boolean 
      Public Property SearchParam As Dictionary(Of Object, Object) 
     End Class 

감사합니다.