Tengo un formulario web C# MVC con una jerarquía de datos bastante compleja. Necesito seleccionar una parte de esos datos, una subcolección de objetos, y enviarlos a una Acción donde puedo manipular la colección y devolver una vista parcial. Todo esto es anticuado, excepto que no puedo entender cómo seleccionar la subcolección con JQuery.
Ejemplo:
Orders.Customers // For simplicity, Customer has the following properties public class Customer { public int Id { get; set;} public string Name { get; set;} }En la vista de Razor, termina con elementos que se ven así:
<input name="Order_Customers[0].Id" id="Order.Customers[0].Id" type="hidden" value="154' /> <input name="Order_Customers[0].Name" id="Order.Customers[0].Name" type="hidden" value="John Smith' /> <input name="Order_Customers[1].Id" id="Order.Customers[1].Id" type="hidden" value="176' /> <input name="Order_Customers[1].Name" id="Order.Customers[1].Name" type="hidden" value="Kendra Wallace' />Solo necesito pasar la subcolección de Clientes a una acción que se parece a esto:
public ActionResult AddCustomer(IList<Customer> customers) { // Do some work on the collection, add/remove members, etc. return PartialView("_Customers", customers); }La parte que no puedo entender es la selección de JQuery. He probado variaciones de esto pero no puedo hacer que ninguna de ellas funcione:
var customers = $("input[name^='Order_Customers']".toArray(); // ? var customers = $("input[name^='Order_Customers[]']".toArray(); // ?Si las entradas seleccionadas aún no están en un formulario, cree uno:
var $form = $('<form>');Agregue los elementos que encontró con jQuery a ese nuevo formulario y luego cree un nuevo objeto FormData con el formulario completo:
var formData = new FormData($form);Luego puede pasar esos datos de formulario directamente a la URL de AJAX y MVC deserializará/vinculará los datos enviados a la lista de Clientes.
url: '@Url.Action("UploadImage")', type: 'POST', data: formData, También deberá cambiar el parámetro de su acción para que MVC pueda asignar las propiedades a Order.Customers o cambiar la propiedad de nombre en el HTML de esos campos para que sea como Customer[0].Name .