2017-07-03 6 views
0

Ich versuche, JSON-Daten von der Ansicht auf den Controller zu übergeben, aber Controller immer Null, ich versuchte alles, um dieses Problem zu lösen, aber keine Lösung hier finden, ist mein Controller und JSON-DatenController erhält keine JSON-Daten

$("#ex_save").on("click",function() { 
     var array = @Html.Raw(Json.Encode(Model)); 
     var json = JSON.stringify(array); 
     $.ajax({ 
      type: "POST", 
      url: "/Equipment/BulkUpdate", 
      data: { jsonCollection : json }, 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function() { 
       console.log("Saved"); 
      }, 
      error: function (e) { 
       console.log(e); 
      } 
     }); 
    }); 

dies meine Ajax-Methode, um Daten an den Controller zu übergeben. und hier ist mein Controller diese Daten zu bekommen: -

[HttpPost] 
    public ActionResult BulkUpdate(string jsonCollection) 
    { 
     try 
     { 
      return View(); 
     } 
     catch 
     { 
      throw; 
     } 
    } 

hier ist die json, was ich enter image description here

hier wird der Fehler übergeben: - enter image description here

+0

Gibt es einen bestimmten Grund Sie senden JSON innerhalb JSON anstatt nur mit dem Standard-Modelbinder zu bekommen? Scheint so, als würdest du einfach Komplexität hinzufügen, ohne dir selbst mehr Arbeit zu geben. –

+0

@RoryMcCrossan Ich habe eine editierbare Tabelle, die ich in der Ansicht zeige, damit der Benutzer sie bearbeiten und auf "Senden" drücken kann, aber ich habe Paginierung, so dass nur die Daten der ersten Seite an die Controller-Sammlung weitergegeben werden. – Abhay

+0

Sie übergeben einen String und erwarten einen String, aber Ihr $ .ajax Aufruf sagt ihm, dass es tatsächlich json ist (wenn es nicht ist, ist es ein String). Ändern Sie den contentType in string oder entfernen Sie ihn. https://StackOverflow.com/a/18701357/2181514 –

Antwort

1

Sie tun müssen, Dies

$("#ex_save").on("click",function() { 
     var array = @Html.Raw(Json.Encode(Model)); 
     var jsonData = {jsonCollection : array}; 
     var postJson = JSON.stringify(jsonData); 
     $.ajax({ 
      type: "POST", 
      url: "/Equipment/BulkUpdate", 
      data: postJson, 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function() { 
       console.log("Saved"); 
      }, 
      error: function (e) { 
       console.log(e); 
      } 
     }); 
    }); 

Was Sie getan haben, ist, dass Sieverwendet haben, um die JSON-Variable in array zu konvertieren, und Sie haben dies dann dem neuen JSON-Objekt { jsonCollection : json } als POST-Anfragetext zugewiesen. So ist es ein gültiges JSON-Objekt wie {'name':'test1', 'age':'12'} dann könnte jQuery nicht als JSON-Daten senden, sondern serialisiert es name=test1&age=12 so erhalten Sie den Fehler "Invalid JSON primitive: name"

Und in Ihrem Fall "Invalid JSON primitive: jsonCollection". Versuchen Sie also, den obigen Code zu verwenden.

+0

half es jetzt nicht, Fehler zu bekommen, aber immer noch keine Sammelwerte am Controller zu bekommen. – Abhay

+0

Aber ich denke, das Problem hier war, den Fehler zu beheben. Jetzt ist es Ihre Seite von Workouts, die Antwortdaten zu überprüfen oder Payload im Server anzufordern und zu debuggen. –

+0

Ich denke auch, dass es grün markiert sein sollte, da die Antwort den Fehler löst. –

0
$("#ex_save").on("click",function() { 
    var array = @Html.Raw(Json.Encode(Model)); 
    var jsonData = {jsonCollection : array}; 
    var postJson = JSON.stringify(jsonData); 
    $.ajax({ 
     type: "POST", 
     url: "/Equipment/BulkUpdate", 
     data: postJson, 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function() { 
      console.log("Saved"); 
     }, 
     error: function (e) { 
      console.log(e); 
     } 
    }); 
}); 

Und statt String am Controller versuchen immer ICollection

[HttpPost] 
public ActionResult BulkUpdate(ICollection<your_class_type> jsonCollection) 
{ 
    try 
    { 
     return View(); 
    } 
    catch 
    { 
     throw; 
    } 
} 
Verwandte Themen