Я нашел несколько ошибок в вашем примере:
1) System.Web.Services.WebMethod
используется только в веб-формах, его нельзя использовать для ActionResult
в MVC и его следует удалить.
2)Обратный вызов AJAX размещен внутри цикла, поэтому он будет выполняться несколько раз вместо одного запроса.
3) Переданные данные - это последнее значение localStorage
, взятое из функции getItem()
как одна строка, а не ключпара-значение, отражающая имена свойств модели и их значения.
Следовательно, предполагая, что у вас есть эта модель:
public class FuelExtra
{
public string CaptainEmpNo { get; set; }
public string AirCraft { get; set; }
public string FlightNo { get; set; }
public string DepartureAirport { get; set; }
public string ArrivalAirport { get; set; }
// other properties
}
Затем вы должны отправить объект пары ключ-значение в виде строки JSON, поскольку *Параметр 1016 * был установлен на application/json
с помощью JSON.stringify()
, как в примере ниже:
function OH10() {
var key = []; // array of keys
var val = []; // array of values
var obj = {}; // combined KVP object
var url1 = "@Url.Action("CreateFuel", "FuelExtras")";
debugger;
for (var i = 0; i < localStorage.length; i++) {
key.push(localStorage.key(i));
val.push(localStorage.getItem(key));
}
for (var n = 0; n < key.length; n++) {
obj[key[n]] = val[n]; // create KVP object from both arrays
}
$.ajax({
type: "POST",
url: url1,
data: JSON.stringify({ fuelExtra: obj }), // convert KVP object to JSON string
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function (result) {
alert("Data has been added successfully.");
},
error: function (xhr, status, err) {
alert("Error while inserting data");
}
});
};
И действие контроллера должно быть таким:
[HttpPost]
public ActionResult CreateFuel(FuelExtra fuelExtra)
{
db.FuelExtras.Add(fuelExtra);
db.SaveChanges();
return Json(new { Message = "SUCCESS" });
}
Так как вы 'повторная отправка AJAX-запроса как метода POST, тогда JsonRequestBehavior.AllowGet
не требуется.
Примечание:
Убедитесь, что все имена ключей внутри переданной строки JSON из AJAX совпадают свсе имена свойств, объявленные внутри FuelExtra
класса.