2016-05-13 2 views
0

です。フォームを送信するためにajaxを使用するasp.netフォームがあります。 jQueryのエラーが表示されていますが、サーバー上のファイルをチェックすると、ファイルは問題なくアップロードされています。ajaxを使用してファイルをアップロードするとエラーが返されますが、asp.netのasp.netで正常に送信されたファイルはC#

注:サイズの大きいファイルを多数送信すると、すべてのファイルが送信されるわけではありません。

クライアントページ:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="NewForm_Frontend_test.aspx.cs" Inherits="eformsmanagementtool.NewForm_Frontend_test" %> 

<!DOCTYPE html> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
    <script src="JavaScript/jquery-1.12.3.js"></script> 

</head> 
<body> 
    <form id="form1" runat="server"> 
    <input id="name" type="text" placeholder="name" /> 
    <button id="btnUpload">Click</button> 
    <asp:FileUpload ID="FileUpload1" runat="server" AllowMultiple="True" /> 
    </form> 
     <script type="text/javascript"> 
      $("#btnUpload").click(function (event) { 
       alert("Script Started") 
       var files = $("#FileUpload1")[0].files; 
       if (files.length > 0) { 
        var formData = new FormData(); 
        for (var i = 0; i < files.length; i++) { 
         formData.append(files[i].name, files[i]); 
        } 
        alert("Number of files: " + files.length) 
        formData.append("Name", "John"); 
        alert("Before ajax") 
        $.ajax({ 
         url: 'NewForm_Backend_test.aspx', 
         timeout: 30000, 
         data: formData, 
         method: 'post', 
         contentType: false, 
         processData: false, 
         success: function (msg) { 
          alert("Good") 
         }, 
         error: function (err) { 
          alert("Bad") 
         } 
        }); 
       } 
      }); 
    </script> 
</body> 

</html> 

サーバー側のページ:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.IO; 
using System.Threading.Tasks; 
using System.Data.SqlClient; 
using System.Configuration; 
using System.Text.RegularExpressions; 
using System.Globalization; 

namespace eformsmanagementtool 
{ 
    public partial class NewForm_Test : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      System.Threading.Thread.Sleep(20000); 
      string data = Request.Form["Name"]; 

      Response.Write("You've submitted: " + data); 
      HttpFileCollection files = HttpContext.Current.Request.Files; 

      for (int i = 0; i < files.Count; i++) 
      { 
       HttpPostedFile file = files[i]; 
       string fileName = Server.MapPath("~/Documents/" + Path.GetFileName(file.FileName)); 
       if (File.Exists(fileName)) 
       { 
        File.Delete(fileName); 
        file.SaveAs(fileName); 
        Response.StatusCode = 200; 
       } 

       else 
       { 
        file.SaveAs(fileName); 
        Response.StatusCode = 200; 
       } 
      } 
      Response.Headers.Add("Content-type", "text/json"); 
      Response.Headers.Add("Content-type", "application/json"); 
     } 
    } 
} 

答えて

0

[PROBLEM RESOLVED]

私は、ajaxにasync: falseを追加する必要がありました。

$.ajax({ 
    url: 'NewForm_Backend_test.aspx', 
    async: false, 
    timeout: 30000, 
    data: formData, 
    method: 'post', 
    contentType: false, 
    processData: false, 
    success: function (msg) { 
     alert("Good") 
    }, 
    error: function (err) { 
     alert("Bad") 
    } 
}); 
0

フォームでこれを追加属性:のenctype = "multipart/form-data" を>

関連する問題