2016-12-01 49 views
0

我有一项任务可以使图像更加现代和最新上传。Pulling asp:FileUpload通过AJAX上传数据。可能吗?

目前,asp:FileUpload选项位于一个窗体内,并且窗体和asp:FileUpload都在服务器上运行。

这是我的代码的简化版本:

<form id="form1" action="/handle.aspx" runat="server" method="post" enctype="multipart/form-data"> 
    <asp:FileUpload runat="server" name="PhotoUpload" ID="PhotoUpload" /> 
    <label>Please upload an image</label> 
</form> 


    $('#form1').submit(function (e) { 
     $.ajax({ 
      type: "post", 
      url: $(this).attr('action'), 
      data: $('#form1').serialize(), 
      success: function (data) { 
       alert('This form was successful'); 
      }, 
      error: function (error) { 
       console.log(error); 
      } 
     }); 
     e.preventDefault(); 
    }); 

我敢肯定我的AJAX调用工作正常,因为在形式背后的代码提交。我的问题是,当我试图从asp:FileUpload中获取值时,它在后面的代码中始终为空。

在后面,我试图收集的图像文件通过这种方式,但它总是回来为空:

HttpPostedFile holder = PhotoUpload.PostedFile; 

现在我的问题:

是否有可能在我的Ajax调用提交即使按钮正在服务器上运行,asp:FileUpload信息到服务器?我应该以不同的方式去解决吗?

我不确定在提交服务器上运行的信息时是否存在一些差异。

请让我知道您的想法。 谢谢!

回答

0

这里是我使用的代码为我工作:

$('#form').submit(function (e) { 
     $.ajax({ 
      type: "post", 
      url: $(this).attr('action'), 
      data: new FormData(this), 
      processData: false, 
      contentType: false, 
      success: function (data) { $('target').html(data); }, 
      error: function (error) { console.log(error); } 
     }); 
     e.preventDefault(); 
    }); 

processData必须设置为false,我的代码中的contentType为false,因为我的表单包含enctype =“multipart/form-data”,它也用于通过提交文件一个AJAX请求。