2016-07-07 64 views
0

我有一個窗體的問題。asp.net mvc Ajax提交表單與jQuery插件fileinput

我需要在表單中用fileinput提交一個帶有ajax的表單。在這種形式下,我使用帶有fileinput的插件。 This is the website

這裏是我的代碼:

<link href="~/Content/Plugin/bootstrap-fileinput-master/css/fileinput.min.css" rel="stylesheet" /> 
<script src="~/Content/Plugin/bootstrap-fileinput-master/js/fileinput.min.js"></script> 
<script src="~/Content/Plugin/bootstrap-fileinput-master/js/fileinput_locale_zh.js"></script> 

    @using (Ajax.BeginForm(null, null, new AjaxOptions(){ 
      HttpMethod = "post",Url = Url.Action("Upload", "WorkItem"), 
       InsertionMode = InsertionMode.Replace, LoadingElementDuration = 2000, 
       OnSuccess = "completed" }, 
       new { role = "form", enctype = "multipart/form-data" })) 
     { 
     <div class="input-group"> 
      <span class="input-group-addon" id="basic-addon1">TITLE</span> 
      <input type="text" name="Descr" class="form-control" aria-describedby="basic-addon1"> 
     </div> 
     <div class="m-b-5"></div> 

     <div class="input-group"> 
      <span class="input-group-addon" id="basic-addon1">POINT</span> 
      <input type="text" name="Point" class="form-control" aria-describedby="basic-addon1"> 
     </div> 
     <div class="m-b-5"></div> 
     <div class="input-group"> 
      <span class="input-group-addon" id="basic-addon1">DESCR</span> 
      <input type="text" name="Descr" class="form-control" aria-describedby="basic-addon1"> 
     </div> 
     <div class="m-b-5"></div> 
     <input id="file-0a" name="file" class="file" type="file" data-min-file-count="1"> 
     <br /> 
     <button type="submit" class="btn btn-primary">Submit</button> 
     <button type="reset" class="btn btn-default">Reset</button> 
    } 

當我點擊提交按鈕,沒有文件可以被接受。出了什麼問題?

+0

使用您不能上傳文件'Ajax.BeginForm()'要麼使用你使用的插件的功能上傳它,或者如果你想上傳表單值包括文件,請參考[這個答案](http://stackoverflow.com/questions/29293637/how-to-append-whole-設定的模型到FORMDATA和 - 獲得-IT-在-MVC/29293681#29293681) –

回答

1

由於@Stepher Muecke告訴@Ajax.BeginForm不能用於發佈文件。 我沒有一個想法有關plugin.I使用下面的方法:

$("#btnUploadExcel").click(function() { 

      if ($("#newuploadexcel").val() == '') { 
       notie.alert(2, "Please Select Any File", 2); 
      } 
      else { 

       if (window.FormData!= undefined) { 

        var fileUpload = $("#newuploadexcel").get(0); 
        var files = fileUpload.files; 

        // Create FormData object 
        var fileData = new FormData(); 

        // Looping over all files and add it to FormData object 
        for (var i = 0; i < files.length; i++) { 
         fileData.append(files[i].name, files[i]); 
        } 

        // Adding one more key to FormData object 
        //  fileData.append('contentId', contentId); commented as now supplierId is passed in the excel itself 

        $.ajax({ 
         url: '/BulkStock/UploadExcel', 
         data: fileData, 
         type: "POST", 
         async: true, 
         dataType: 'json', 
         contentType: false, 
         processData: false, 
         success: function (result) { 

          var data = result.message; 
          //1=Failure, No excel 
          //2= Failue, with excel 
          //3=success, no excel 

          if (result.errmsg == '3') { 
           notie.alert(1, data, 6); 
          } 
          else if (result.errmsg == '1') { 
           notie.alert(3, data, 6); 
          } 
          else { 
           window.location = result.link; 
           notie.alert(3, data, 10); 
          } 

         }, 
         error: function (response) { 

          console.log(response.responseText); 
         }, 
         failure: function (response) { 
          console.log(response.responseText); 
         } 
        }); 

        $("#newUpload").modal('hide'); 

       } else { 
        notie.alert(3, "FormData is not supported.", 3); 
       } 
      } 
     }); 

而我的控制器來獲取文件是:

public JsonResult UploadExcel() 
     { 
      string filePath = String.Empty; 
      string fileName = string.Empty; 
      if (Request.Files.Count > 0) 
      { 
        // Get all files from Request object 
        HttpFileCollectionBase files = Request.Files; 

        for (int i = 0; i < files.Count; i++) 
        { 
         HttpPostedFileBase file = files[i]; 
         fileName = file.FileName; 
         string extension = System.IO.Path.GetExtension(fileName); 
         if (extension.Equals(".xls") || extension.Equals(".xlsx")) 
         { 
          var now = DateTime.Now.Ticks.ToString(CultureInfo.InvariantCulture); 
          string my3DigitRandomNumber = now.Substring(now.Length - 7, 3); 
          fileName = (file.FileName.Replace(extension, "")) + (my3DigitRandomNumber + extension); 
          filePath = string.Format("{0}/{1}", Server.MapPath("~/excelfiles"), fileName); 
          file.SaveAs(filePath); 
          } 
        } 
       } 
    } 
Create a folder with the name "excelfiles" in your solution