Also ich möchte per Javascript/ajax Daten an den Controller übergeben.
Das sieht so aus:
var request =
{
"type": "POST",
"url": "/Home/SetPulverData",
"data": "[{ 'IAufNr': '1111', 'IColor': 'Col1' },{'IAufNr': '2222', 'IColor': 'Col2' }]"
}
$.ajax(request)
.done(function (ergebnis) {
if (ergebnis.success == true) {
}
})
.fail(function (errMsg) {
console.log(errMsg);
})
Der Controller:
[HttpPost]
public ActionResult SetPulverData(IEnumerable<ColModel> myAuftraege )
{
return Json("");
}
Das Model sieht so aus:
public class ColModel
{
public int id { get; set; }
public string IAufNr { get; set; }
public string IColor { get; set; }
public string EColor { get; set; }
public string ESonder { get; set; }
public string IWagenNr { get; set; }
public string ERueckMldNr { get; set; }
}
myAruftraege ist immer null, da kann ich machen was ich will.
Habe schon gegoogelt und alles Mögliche ausprobiert.
Mit dem Tool "Postman" funktioniert es aber seltsamerweise.
Schaue ich mir den Ajax Request von Postman an, sieht der so aus:
var settings = {
"async": true,
"crossDomain": true,
"url": "http://localhost:18577/Home/SetPulverData",
"method": "POST",
"headers": {
"content-type": "application/json",
"cache-control": "no-cache",
"postman-token": "9ee8b4cc-7bff-3f32-0425-244ecd03f466"
},
"processData": false,
"data": "[\n\n{\n\t\"IAufNr\": \"1111\",\n\t\"IColor\": \"Col1\"\n},\n{\n\t\"IAufNr\": \"2222\",\n\t\"IColor\": \"Col2\"\n}\n\n\t\n]"
}
$.ajax(settings).done(function (response) {
console.log(response);
});
Einziger Unterschied wäre die content-type Angabe.
Gebe ich die aber in meinem Script an, macht das aber keinen Unterschied und myAuftraege ist null.
Habe auch schon die Ausgabe von Postman in mein Script kopiert, myAuftraege ist null.
Kann jemand erkennen, an welcher Stellschraube es hier noch fehlt?
IIRC muss es eigentlich
"data": { myAuftraege : [{ 'IAufNr': '1111', 'IColor': 'Col1' },{'IAufNr': '2222', 'IColor': 'Col2' }] }
lauten, ansonsten weiß MVC nicht, wie es mappen muss.
Evtl. funktioniert es per Postman, weil hier die Value implizit als String übergeben wird; in Deinem JavaScript-Code aber nun mal als object.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code