Ваш текущий код использует GET
в качестве типа для вызова $ .ajax.jQuery ajax отправит GET-запрос к конечной точке с данными, добавленными к строке запроса URL-адреса, к которому он обращается.Когда вы хотите отправить простые значения, это нормально, но когда вы хотите отправить сложный объект, например, что вы хотите отправить, вы должны использовать тип POST.
Кроме того, для привязки модели к работе, структураданных должны быть похожи на структуру вашего представления модели и имена свойств.Исходя из данных, которые вы хотите отправить, похоже, вам нужна модель вида, подобная этой.
public class GameStateVm
{
public int Id { set;get;}
public string State { set;get;}
}
public class SaveGameVm
{
public GameStateVm[] Character { set;get;}
public bool PFlag { set;get;}
}
, которую вы можете использовать в качестве параметра метода действия HttpPost.
[HttpPost]
public ActionResult SaveGame(SaveGameVm characters)
{
// I am simply returning the posted data as it is, for testing
// You may return a boolean value if you want that.
return Json(characters);
}
и теперь в своем клиентском коде убедитесь, что у вашего объекта JS есть аналогичные имена Strucutre и свойств.
// JS object with same structure as our SaveGameVm
var d = { PFlag: false, character:[]};
d.PFlag = true; // to do : Set the value based on your condition
// dummy code to add 2 items to the array.
// to do : replace with your code to populate the array
for (var i = 0; i < 2; i++) {
var id =i; // to do : replace hard coded values
var state = 'active';
d.character.push({ id: id, state: state});
}
$.ajax({
url: '@Url.Action("SaveGame", "Game")',
type: 'POST',
data: JSON.stringify(d),
contentType: 'application/JSON',
success: function (result) {
console.log(result);
}
});