Estoy tratando de enviar una lista de valores de Vista a Controlador. Probé muchas soluciones de Internet pero no tuve éxito.
My View HTML Table lista de datos enviados al controlador a través de JSON, pero la lista está vacía incluso cuando uso JSON.stringify
Aquí está mi código
JavaScript:
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> <script type="text/javascript" src="http://ajax.cdnjs.com/ajax/libs/json2/20110223/json2.js"></script> <script type="text/javascript"> $("body").on("click", "#btnSave", function () { //Loop through the Table rows and build a JSON array. var customers = new Array(); $("#tblCustomers TBODY TR").each(function () { var row = $(this); var customer = {}; //skill.skill_name = row.find("TD").eq(0).html(); customer.CNIC = row.find("TD").eq(1).html(); customers.push(customer); }); console.log(customers); console.log(JSON.stringify(customers)); //Send the JSON array to Controller using AJAX. $.ajax({ type: "POST", //traditional: true, url: "/Admin/Reconcile/Customers", contentType: "application/json; charset=utf-8", data: JSON.stringify(customers), dataType: "json", success: function (r) { alert(r + " record(s) inserted."); location.reload(); } }); }); </script>Acción del controlador:
public JsonResult Customers(List<String> customers) { }En primer lugar, debe crear un modelo como este:
public class Customer { public string CNIC { get; set; } } Luego, dado que pasa datos de tipo json en ajax, debe usar [FromBody] en acción:
public JsonResult Customers([FromBody]List<Customer> customers) { }Está enviando una matriz de objetos, por lo que para que el enlazador de modelos funcione, debe aceptar una Lista de SomeModel, donde SomeModel debe tener una propiedad CNIC. Consulte la documentación aquí https://docs.microsoft.com/en-us/aspnet/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api sobre cómo se vinculan los objetos .
Así que estás enviando esto:
[ { "CNIC":"somevalue", "CNIC":"somevalue" } ]Y está tratando de vincularlo a una Lista de cadenas y no sucederá. Intente vincularlo con la Lista de SomeModel:
public class SomeModel { public string CNIC { get; set; } } Pruebe también este atributo [IgnoreAntiforgeryToken] encima de su acción. Si funciona, debe enviar el token antifalsificación con la solicitud posterior.