您好我正在尝试使用表单数据
在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(),但它仍然无法正常工作..
谢谢你们
答案 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
语句,但我想这只是一个拼写错误,在您的实际代码中,函数返回一个值。