【发布时间】:2014-12-06 02:51:48
【问题描述】:
我想向我的 MVC 控制器发布三件事:一个图像和两个字符串。
在视图上,我有一个使用enctype="multipart/form-data" 的表单,它会在选择图像文件后自动提交表单。这是此表单的提交处理程序:
$("#PhotoUploadForm").on("submit", function (event) {
event.preventDefault();
var ImageData = $("#PhotoUploadFileInput").val();
var GuestNumber = $("#GuestID").val();
var TCSA_ID = vm.GetSelectedTreatmentAreaTCSA_ID(vm.Photographs.SelectedTreatmentArea());
var dto = {
ImageData: ImageData,
GuestNumber: GuestNumber,
TCSA_ID: TCSA_ID
}
$.ajax({
url: 'SaveImage',
type: "POST",
contentType: "multipart/form-data",
data: ko.toJSON(dto),
success: function (data) {
console.log(submitted);
}
});
});
dto 对象在我的 Model 中定义:
public class PhotoUploadDTO
{
public HttpPostedFileBase ImageData { get; set; }
public string GuestNumber { get; set; }
public string TCSA_ID { get; set; }
}
在我的 Controller 中,我有一个以 dto 为参数的操作:
public ActionResult SaveImage(PhotoUploadDTO dto)
{
//etc.
}
当我尝试发布 dto 时,所有内容都被发布为 null。这对我来说有问题,因为我希望能够同时将图像和两个字符串发布到控制器。
我怀疑问题出在var ImageData(在我的视图上设置为<input type="file" id="PhotoUploadFileInput"> 的值),并且它被发布为C:/fakepath/etc.,但不是作为实际图像文件。这很令人沮丧,因为我知道如果我有一个刚刚发布图像的表单,这甚至不会成为问题,但是我需要使用这个提交处理程序,而我没有'不知道如何将实际的图像数据带入其中。
为什么数据在到达 MVC 控制器时是 null,我怎样才能在发布这三个项目的同时仍然能够使用提交处理程序?
【问题讨论】:
-
您不能通过 ajax 上传文件。有一些解决方法,例如通过 iframe 上传文件,但不幸的是,您不能这样做。
-
如果您想将其发布为答案,我认为您的评论应该足以作为答案。
-
@MelanciaUK '你不能通过 ajax *这种方式上传文件' 很抱歉造成混乱
-
@Christopher.Cubells 什么?你可以。对新浏览器使用
XMLHttpRequestsendAsBinary()或File API。 -
您可以在这里找到解决方案:stackoverflow.com/questions/2306910/…
标签: ajax asp.net-mvc asp.net-mvc-5