Hola, estoy tratando de enviar archivos y algún objeto en una llamada ajax, usando datos de formulario
aquí está mi llamada ajax
$.ajax({ type: "POST", url: "/Post/SharePost", processData: false, contentType: false, headers: getAjaxHeaderWithToken(), dataType: "json", data: getDataToPost(), });aquí está mi método getDataToPost()
function getDataToPost() { var dataToPost = new FormData(); for (var i = 0; i < savedPictures.length; i++) { var savedPictureToPost = { PictureId: savedPictures[i].PictureId}; dataToPost.append("vm.SavedPictures[" + i + "]", JSON.stringify( savedPictureToPost)); } }aquí está mi controlador
[HttpPost] [ValidateAntiForgeryTokenOnAllPosts] public ActionResult SharePost(SharePostVM vm, IEnumerable<HttpPostedFileBase> unsavedPictures) { }y aquí está mi SharePostVM
public class SharePostVM : BasePostVM { public SharePostCategories SharePostCategories { get; set; } [Required] public decimal? Price { get; set; } [Required] [Display(Name = "Available Date")] public string DateAvailableFrom { get; set; } public IEnumerable<PictureVM> SavedPictures { get; set; } }Como puede ver en mi controlador, también necesito enviar archivos, pero solo excluyo el método para hacerlo simple. Básicamente, necesito enviar archivos y objetos con una matriz de objetos. Puedo vincular archivos y la propiedad de SharePostVM como el precio y DateAvailableFrom agregando como dataToPost.append("vm", "priceValue"), pero no puedo vincular las imágenes guardadas en SharePostVM. ¿Cómo puedo vincularlos? Sé que puedo recuperar de Request en el lado del servidor, pero solo quiero saber si puedo vincularlos. También lo intenté sin JSON.stringfy() pero aún no funciona.
Gracias chicos
Prueba así:
var pictureId = savedPictures[i].PictureId; dataToPost.append("SavedPictures[" + i + "].PictureId", pictureId); // ... and so on if you want to bind other properties than PictureId Además, en la función getDataToPost que ha mostrado en su pregunta no hay una declaración de return , pero supongo que esto es solo un error tipográfico aquí y en su código real la función devuelve un valor.