2017-10-02 3 views
0

私のデータ(json)をビューからajaxを通して私のコントローラに渡そうとしていますが、これは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; } 

} 

これは私のajax機能です。

 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はそうあなただけのコントローラメソッドに文字列を送信している....文字列内のJavaScript JSONテキストにオブジェクトを格納JSONテキストを回す... 'JSON.stringify'を削除してみてください – Hackerman

+0

ajax呼び出しで渡すデータの構造を追加できますか? JSONオブジェクトのプロパティ名がC#モデルのプロパティ名と一致しない場合、この問題が頻繁に発生します。 –

+0

@Hackermanあなたの答えをありがとう、stringifyを削除するAjaxは私のコントローラを見つけられませんでした。私のブラウザのコンソールでエラー500。 –

答えて

0

1つの問題は、あなたのAJAX呼び出しを通じて送信されたデータは、アレイのように見えるということですコレクション:

public ActionResult crearCampManual(TipificacionGeneralCampaña model) 

送信している場合あなたのC#コントローラへのあなたのAJAXからTipificacionGeneralCampañaオブジェクトの配列、そしてあなたのコントローラの定義は次のようになりたいです:@Hackeremanは彼のコメントで述べたものを繰り返すために

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

そしてまた、あなたが使用する必要はありませんあなたのデータの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配列に2つの異なるオブジェクトを追加しているように見えますあなたのコントローラ:

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

C#でコレクションを作成する場合、コレクション内のすべてのオブジェクトは同じタイプである必要があります。つまり、同じプロパティ名とプロパティタイプを持つ必要があります。解決策は、JSONオブジェクトの宣言を変更である

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

あなたの助けてくれてありがとう私の友人、@ルークTブルックスは私に問題の鍵を譲ります。コントローラーがオブジェクトに対して期待されていた配列を送信していました。解決策は 'var jsonListaGeneral = { " CamposCreados ":jsonTipificacion、 " ListasDeSeleccion ":jsonListasSeleccion }'の宣言を変更しました。 JSON.stringifyについては、他のケースでデータを受け取る必要があります。このエラーは500です。今すぐ動作します。 –

0

:あなたのC#のコントローラは、現在の設定であるか、それはこのように構成されたJSONオブジェクトを受け入れると

var jsonListaGeneral = { 
    "CamposCreados": jsonTipificacion, 
    "ListasDeSeleccion": jsonListasSeleccion 
} 
関連する問題