2017-10-02 3 views
0

보기에서 아약스를 통해 내 컨트롤러로 데이터 (json)를 전달하려고 시도했지만 null이 도착했습니다. 사전에 도움이나 제안을 보내 주셔서 감사합니다.JSON을 컨트롤러 MVC3에 전달합니다.

이것은 내 모델입니다.

public class TipificacionModel 
{ 
    public int Existente { get; set; } 
    public string Campo { get; set; } 
    public int Regla { get; set; } 

} 

public class ListasSeleccionModel{ 
    public List<string> DatosSeleccion { get; set; } 
} 

public class ListaTipificaciones 
{ 
    public string NombreCampaña { get; set; } 
    public List<TipificacionModel> Tipificacion { get; set; } 
} 

public class DatosSeleccionMultiple 
{ 
    public List<String> Columnas { get; set; } 
    public List<ListasSeleccionModel> ListasSeleccion { get; set; } 
} 

public class TipificacionGeneralCampaña 
{ 
    public ListaTipificaciones CamposCreados { get; set; } 
    public List<DatosSeleccionMultiple> ListasDeSeleccion { get; set; } 

} 

이것은 내 아약스 기능입니다.

 jsonListaGeneral = []; 

     jsonListaGeneral.push(jsonTipificacion); 
     jsonListaGeneral.push(jsonListasSeleccion); 

     console.log(jsonListaGeneral); 

     $.ajax({ 
      url: '@Url.Action("crearCampManual", "DPS")', 
      type: 'post', 
      data: JSON.stringify(jsonListaGeneral), 
      contentType: 'application/json; charset=utf-8;', 
      dataType: 'json', 
      success: function (response) { 
       alert(response) 
       return; 
      }, 
      error: function (x) { 
       alert(x.responseText); 
      } 
     }); 

이것은 내 컨트롤러입니다.

[HttpPost] 
    public ActionResult crearCampManual(TipificacionGeneralCampaña model) 
    { //Here the model value is null, why?} 

내 브라우저 콘솔에서 json을 인쇄 할 때 모든 것이 좋습니다. 그러나 뭔가 나쁜 일이 생기고, 뭔가 잘못된 일이 생깁니다.

jsonListaGeneral = []; 

하지만 당신의 C#을 모델 배열이 아닌 나 :

Console Browser

Break Point Controller

+0

JSON.stringify은 그래서 당신은 당신 컨트롤러 메소드 내로 문자열을 보내는 .... 문자열에서 자바 스크립트 JSON 텍스트에 객체 저장 JSON 텍스트를 회전 ...은'JSON.stringify'을 제거하려고 – Hackerman

+0

ajax 호출을 통해 전달할 데이터의 구조를 추가 할 수 있습니까? 내 JSON 개체의 속성 이름이 내 C# 모델의 속성 이름과 일치하지 않는 경우이 문제가 자주 발생합니다. –

+0

@Hackerman stringify Ajax를 삭제 해 주셔서 감사합니다. 내 컨트롤러를 찾았습니다. 브라우저 콘솔에 500 오류가 있습니다. –

답변

0

하나의 문제는 당신이 당신의 AJAX 호출을 통해 전송되는 데이터를 배열로 나타납니다이다 징수 :

public ActionResult crearCampManual(TipificacionGeneralCampaña model) 

당신의 C#을 컨트롤러로 AJAX에서 TipificacionGeneralCampaña 객체의 배열은, 당신은 다음과 같이 당신의 컨트롤러 정의를 원하는 것 : 또한

public ActionResult crearCampManual(List<TipificacionGeneralCampaña> model) 

그리고를 사용할 필요가 없습니다 무엇 @Hackereman 그의 의견에 명시된 되풀이하는 당신이 당신의 컨트롤러에 전달하기 전에 데이터에 JSON.Stringify 기능 :

$.ajax({ 
     url: '@Url.Action("crearCampManual", "DPS")', 
     type: 'post', 
     data: jsonListaGeneral, 
     contentType: 'application/json; charset=utf-8;', 
     dataType: 'json', 
     success: function (response) { 
      alert(response) 
      return; 
     }, 
     error: function (x) { 
      alert(x.responseText); 
     } 
    }); 

나는 당신의 콘솔 브라우저 화면에서 발견 또 다른 문제는 : 당신이 보내기 전에 같은 JSON 배열에 두 개의 서로 다른 개체를 추가 할 것 귀하의 컨트롤러 :

jsonListaGeneral.push(jsonTipificacion); 
    jsonListaGeneral.push(jsonListasSeleccion); 

C#에서 컬렉션을 만들 때 컬렉션의 모든 개체는 동일한 유형이어야하며 동일한 속성 이름 및 속성 유형을 가져야합니다.

{ 
    CamposCreados : { 
     NombreCampaña : "", 
     Tipificacion : [ 
      { 
       Existente : 0, 
       Campo : "", 
       Regla : 0 
      }, 
      { 
       Existente : 1, 
       Campo : "", 
       Regla : 1 
      } 
     ] 
    } 
    ListasDeSeleccion : [ 
     { 
      Columnas : "", 
      ListasSeleccion : [ 
       { 
        DatosSeleccion : [ 
         { 
          "", 
          "", 
          "" 
         } 
        ] 
       }, 
       { 
        DatosSeleccion : [ 
         { 
          "", 
          "", 
          "" 
         } 
        ] 
       } 
      ] 
     } 
    ] 
} 
+0

내 친구들에게 도움을 주셔서 감사합니다. @ 루크 티 브룩스가 내게이 문제의 열쇠를 줬습니다. 컨트롤러에 객체가 있어야한다는 배열을 보냈습니다. 해결책은'var jsonListaGeneral = { "CamposCreados": jsonTipificacion, "ListasDeSeleccion": jsonListasSeleccion }'의 선언을 변경하는 것입니다. JSON.stringify 정보는 다른 경우에 데이터를받는 데 필요합니다.이 오류는 500 오류입니다. 이제 작동합니다. –

0

이 솔루션은 JSON 객체의 선언을 변경할 수 있습니다 : 당신의 C#을 컨트롤러가 현재 설치 방법으로

는,이 같은 구조 된 JSON 객체를 받아 들일 것입니다.

var jsonListaGeneral = { 
    "CamposCreados": jsonTipificacion, 
    "ListasDeSeleccion": jsonListasSeleccion 
} 
관련 문제