【问题标题】:File posted to MVC Controller is null发布到 MVC 控制器的文件为空
【发布时间】: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 什么?你可以。对新浏览器使用 XMLHttpRequest sendAsBinary()File API
  • 您可以在这里找到解决方案:stackoverflow.com/questions/2306910/…

标签: ajax asp.net-mvc asp.net-mvc-5


【解决方案1】:

通过 ajax 上传文件是一件棘手的事情。一些最现代的 Web 浏览器通过使用 File API 来处理这个问题,这确实适用于通过 ajax 上传文件。但是,使用此解决方案不适用于使用旧版浏览器的人。

最好的办法是使用 jquery 插件或类似的东西,这些插件将依赖于通过 iframe 上传文件等技术或其他变通方法。

【讨论】:

猜你喜欢
  • 2013-01-12
  • 1970-01-01
  • 2021-11-07
  • 2014-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多