我想向我的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
个对象
public class PhotoUploadDTO
{
public HttpPostedFileBase ImageData { get; set; }
public string GuestNumber { get; set; }
public string TCSA_ID { get; set; }
}
在我的控制器中,我有一个以dto
为参数的操作:
public ActionResult SaveImage(PhotoUploadDTO dto)
{
//etc.
}
当我尝试发布dto
时,所有内容都会发布为null。这对我来说有问题,因为我希望能够同时将图像和两个字符串发布到控制器。
我怀疑问题出在var ImageData
(在我的视图中设置为<input type="file" id="PhotoUploadFileInput">
的值),并且它被发布为C:/fakepath/etc.
但不是实际的图像文件。这令人沮丧,因为我知道如果我有一个只是发布图片的表单,它甚至不会成为一个问题,但我需要才能使用它提交处理程序,我不知道如何将实际的图像数据带入其中。
为什么数据null
何时到达MVC控制器,如何在仍然能够使用提交处理程序的同时发布这三个项目?
答案 0 :(得分:1)
通过ajax上传文件是一件棘手的事情。一些最现代的Web浏览器通过使用File API来处理这个问题,{{3}}确实可以通过ajax上传文件。但是,使用此解决方案不适用于旧浏览器上的人。
您最好的选择是使用jquery插件或类似的东西,这些插件将依赖于通过iframe或其他解决方法上传文件等技术。