Estoy tratando de enviar algunos datos de mi matriz de javascript a mi controlador mvc. Cuando realizo la depuración, termino en mi método public void GetJSArray(List<SelectorModel> selectorModels)
pero selectorModels es null .
Aquí está mi modelo.
public class SelectorModel { public int ID { get; set; } public string Cords { get; set; } public string Name { get; set; } }aquí está mi código C# en el controlador.
[HttpPost] public void GetJSArray(List<SelectorModel> selectorModels) { //Code here }y aquí está mi JavaScript/Ajax
function SaveInfoSpots() { var savedeSpots = JSON.stringify({ selectorModels: infospots }); $.ajax({ type: "POST", url: '/Home/GetJSArray', contentType: "application/json; charset=utf-8", dataType: 'JSON',//json data: savedeSpots, traditional: true }); } Si hago un console.log(savedeSpots) obtengo esto. {"selectorModels":[{"ID":1,"Name":"Infospot1","Cords":"5000.00, 2293.85, 2278.05"},{"ID":1,"Name":"Infospot2","Cords":"1.94, 584.50, 5000.00"},{"ID":1,"Name":"Infospot3","Cords":"5000.00, -2705.97, -277.02"},{"ID":1,"Name":"Infospot4","Cords":"5000.00, 504.93, -2845.93"}]}
Dos lugares necesitan modificarse en su código:
Primero, sobre el enlace del modelo , agregue el atributo [FromBody] en el parámetro de acción:
[HttpPost] public void GetJSArray([FromBody]List<SelectorModel> selectorModels) { //Code here }En segundo lugar, su API necesita una matriz, no un objeto, por lo que cuando llama a la API, debe publicar el parámetro de esta manera:
[ { "ID": 1, "Name": "Infospot1", "Cords": "5000.00, 2293.85, 2278.05" }, { "ID": 1, "Name": "Infospot2", "Cords": "1.94, 584.50, 5000.00" }, { "ID": 1, "Name": "Infospot3", "Cords": "5000.00, -2705.97, -277.02" }, { "ID": 1, "Name": "Infospot4", "Cords": "5000.00, 504.93, -2845.93" } ] no el formato {"selectorModels":...} .
Si solo necesita API, crear un proyecto webapi es mejor que un proyecto mvc.
Agregue [FromBody] a su parámetro de lista de controladores, como
public void GetJSArray([FromBody] List<SelectorModel> selectorModels)Intenta eliminar
traditional: truey
charset=utf-8 de la llamada ajax también. Debería ver la lista poblada luego en el controlador.