2017-10-02 4 views
0

Ich versuche, meine Daten (JSON) von Ajax durch Sicht zu meinem Controller zu übergeben, aber das Ergebnis null. Vielen Dank im Voraus für jede Hilfe oder Anregung.Weitergabe von JSON an Controller MVC3 C#. NET

Dies ist mein Modell.

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

} 

Das ist meine Ajax-Funktion.

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

Dies ist mein Controller.

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

Wenn ich den JSON in meiner Browser-Konsole drucke, ist alles gut. Aber etwas Schlimmes passiert, ich mache etwas falsch.

Console Browser

Break Point Controller

+0

JSON.stringify dreht ein Javascript-Objekt in JSON Text und speichert diese JSON Text in einem String .... so sind Sie nur eine Zeichenfolge in Ihnen Controller-Methode zu senden ... versuchen, die 'JSON.stringify' Entfernen – Hackerman

+0

Kannst du die Struktur der Daten hinzufügen, die du durch deinen Ajax-Anruf führst? Dieses Problem tritt häufig auf, wenn die Eigenschaftsnamen meines JSON-Objekts nicht mit den Eigenschaftsnamen meines C# -Modells übereinstimmen. –

+0

@Hackerman Danke für deine Antwort, entfernen stringify Ajax fand meinen Controller nicht. Fehler 500 in meiner Browserkonsole. –

Antwort

0

Ein Problem ist, dass die Daten, die Sie Ihre AJAX-Aufruf senden durch erscheint ein Array zu sein:

jsonListaGeneral = []; 

Aber Ihr C# Modell ist kein Array oder Sammlung:

public ActionResult crearCampManual(TipificacionGeneralCampaña model) 

Wenn Sie senden ein Array von TipificacionGeneralCampaña Objekten aus der AJAX in Ihrem C#-Controller, dann würden Sie Ihre Controller-Definition sollen wie folgt aussehen:

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

Und auch zu wiederholen, was @Hackereman in seinem Kommentar erwähnt, Sie brauchen nicht zu verwenden die JSON.stringify Funktion auf Ihren Daten, bevor Sie es zu Ihrem Controller-Pass:

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

Ein weiteres Problem, das ich von Ihrem Console Browser Screenshot bemerkt: Sie scheinen zwei verschiedene Objekte auf den gleichen JSON-Array werden, indem vor dem Senden zu Ihr Controller:

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

Beim Erstellen einer Objektgruppe in C# müssen alle Objekte im Objekt vom gleichen Typ sein, dh sie haben dieselben Eigenschaftsnamen und Objekttypen.

Mit wie C# Controller ist derzeit Setup, es wird ein JSON-Objekt akzeptieren, die wie folgt strukturiert: ist

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

Danke für Ihre Hilfe, meine Freunde, @Luke T Brooks geben mir den Schlüssel des Problems. Ich habe ein Array gesendet und der Controller wurde für ein Objekt erwartet. Die Lösung war die Änderung der Deklaration von 'var jsonListaGeneral = { " CamposCreados ": jsonTipificacion, " ListasDeSeleccion ": jsonListasSeleccion }'. Über die JSON.Stringify ist notwendig für den Empfang der Daten in anderen Fällen dieser Fehler 500 angezeigt. Jetzt funktioniert. –

0

Die Lösung, die die Deklaration des Objekts Json ändern.

var jsonListaGeneral = { 
    "CamposCreados": jsonTipificacion, 
    "ListasDeSeleccion": jsonListasSeleccion 
} 
Verwandte Themen