Ich habe ein Beispiel, das eine JSON-Postanforderung an MVC-Controller sendet. Dieses Beispiel funktioniert in ASP.NET 4.5, funktioniert jedoch nicht in der neuesten Version von ASP.NET 5. Vermisse ich etwas in diesem Beispiel?JSON Post Request funktioniert nicht in ASP.NET5 MVC aber arbeitet in ASP.NET4.5 MVC
Ich habe ein Modell erstellt, aber ich habe es nicht an die Datenbank gebunden. Es wird nur das im Speicher erstellte Objekt sein.
public class SalesOrder { public int SalesOrderId { get; set; } public string CustomerName { get; set; } public string PONumber { get; set; } }
Ich benutze Visual Studio 2015 die Modell-basierte Steuerung und die damit verbundene CRUD Ansichten zu erstellen. In diesem Beispiel werde ich jedoch nur die Ansicht "Erstellen" ausführen.
In der Steuerung habe ich eine SalesOrder-Objektliste hart codiert und sie enthält nur ein Element. Ich werde es verwenden, um mit den CRUD-Ansichten zu arbeiten.
private List<SalesOrder> salesOrderList = new List<SalesOrder> ( new SalesOrder[] { new SalesOrder() { SalesOrderId = 1, CustomerName = "David", PONumber = "123" } });
in der Steuerung, schaffe ich auch eine neue Funktion „Speichern“ Anforderung zu verarbeiten. Die Anforderung ändert nur die CustomerName-Eigenschaft des Modells und springt dann mit dem JSON-Ergebnis zurück.
[HttpPost] public JsonResult Save(SalesOrder salesOrderViewModel) { salesOrderViewModel.CustomerName = "David returns"; return Json(new { salesOrderViewModel }); }
Im Create.cshtml, habe ich einen Knopf und heften sich an seinem Click-Ereignis JQuery-Skript.
<p><button id="saveButton">Save</button></p>
Dies ist JQueryScript.
$(function() {
var clickFunc = function() {
var salesOrderViewModel = {
"salesOrderViewModel": {
"SalesOrderId": 123,
"CustomerName": "ab",
"PONumber": "2",
}
}
$.ajax({
url: "/SalesOrders/Save/",
type: "POST",
cache: false,
data: JSON.stringify(salesOrderViewModel),
contentType: "application/json; charset=utf-8"
});
}
$('#saveButton').click(clickFunc)
})
ich klicken Sie auf die Schaltfläche "Speichern" in Create.cshtml die Post-Anforderung auszulösen.
Ich legte den Debug-Break-Point in der Steuerung und überprüfen Sie die kommende Postanforderung. In ASP.NET 4.5 funktioniert die JSON-Deserialisierung und es werden alle Werte angezeigt.
In ASP.NET 5 wird jedoch ein leeres Objekt zurückgegeben. Wenn Sie in ASP.NET 5-Fall F12 drücken, um den Debugger in Microsoft Edge zu starten, zeigt es an, dass die Post-Anforderung die richtigen Werte enthält, aber aus bestimmten Gründen nicht an den MVC-Controller übergeben wird.
Bitte sehen Sie diese Screenshots: http://i63.tinypic.com/68vwnb.jpg
Habe ich etwas verpasst? Vielen Dank für Ihre Hilfe ...
Die Daten sollten nur 'Daten: {SalesOrderId: 123, CustomerName:" ab ", PONumber:" 2 "},' und entfernen Sie die 'contentType:" -Anwendung/json; charset = utf- 8 "Option. –
Ich habe es erneut ohne contentType versucht, funktioniert aber immer noch nicht. Danke – David
Funktioniert für mich. Es gibt eindeutig etwas anderes in Ihnen Code, dass Sie uns nicht gezeigt haben, dass das Problem verursacht –