带有formData的Ajax不会绑定asp.net控制器

时间:2017-03-19 06:20:57

标签: javascript c# jquery asp.net ajax

您好我正在尝试使用表单数据

在ajax调用中发送文件和一些对象

这是我的ajax电话

$.ajax({
   type: "POST",
   url: "/Post/SharePost",
   processData: false,
   contentType: false,
   headers: getAjaxHeaderWithToken(),
   dataType: "json",
   data: getDataToPost(),
});

这是我的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));
    }
}

这是我的控制器

[HttpPost]
[ValidateAntiForgeryTokenOnAllPosts]
public ActionResult SharePost(SharePostVM vm, IEnumerable<HttpPostedFileBase> unsavedPictures)
{

}

这是我的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; }
}

正如您在我的控制器中看到的那样,我也需要发送文件,但我只是排除了使其变得简单的方法。基本上,我需要使用一个对象数组发送文件和对象。我可以通过追加像dataToPost.append(“vm”,“priceValue”)来绑定文件和SharePostVM的属性,如price和DateAvailableFrom,但我无法绑定SharePostVM中的SavedPictures。我该如何绑定它们?我知道我可以从服务器端的Request中检索,但我只是想知道我是否可以绑定它们。我也试过没有JSON.stringfy(),但它仍然无法正常工作..

谢谢你们

1 个答案:

答案 0 :(得分:2)

试试这样:

var pictureId = savedPictures[i].PictureId;
dataToPost.append("SavedPictures[" + i + "].PictureId", pictureId);
// ... and so on if you want to bind other properties than PictureId

同样在您在问题中显示的getDataToPost函数中,没有return语句,但我想这只是一个拼写错误,在您的实际代码中,函数返回一个值。