2017-09-25 54 views
0

下面是当我在提交时将表单返回给jquery函数时的剃须刀代码。输入类型文件没有被序列化在jQuery中ajax

@model Slider 
    @{ 

     Layout = null; 
    } 

    @using (Html.BeginForm("AddOrEdit", "Slider", FormMethod.Post, new { enctype = "multipart/form-data" , onsubmit = "return SubmitForm(this)" })) 
    { 
     @Html.HiddenFor(m => m.Id) 



    <div class="form-group" style="height:270px;"> 
     @Html.LabelFor(m => m.ImageFile, new { @class = "blue-text", @style = 
     "font-size:16px", @id = "" }) 

<input name="ImageFile" type="file" /> 

</div> 

<div class="form-group"> 
    <input type="submit" value="Submit" class="btn btn-primary" /> 
    <input type="reset" value="Reset" class="btn" /> 
</div> 
} 

Jquery函数不能序列化输入文件类型并将其发送给控制器,除非我将其更改为json。但是,如果我想改变它的JSON我不会得到验证下面的代码

function SubmitForm(form) { 
     debugger; 
     $.validator.unobtrusive.parse(form); 
     debugger; 
     if ($(form).valid()) { 
      debugger; 
      $.ajax({ 
       type: "POST", 
       url: form.action, 
       //"datatype": "json" 
       data: $(form).serialize(), 
       success: function (data) { 
        if (data.success) { 
         Popup.dialog('close'); 
         dataTable.ajax.reload(); 

         $.notify(data.message, { 
          globalPosition: "top center", 
          className: "success" 
         }) 

        } else { 
         Popup.dialog('close'); 

         $.notify(data.message, { 
          globalPosition: "top center", 
          className: "error" 
         }) 
        } 
       } 
      }); 
     } 
     return false; 
    } 

回答

3

尝试,并在Ajax代码一些变化。在代码中添加以下参数。

过程数据:假的, 的contentType:假的,

并添加var formData = new FormData($("#formID")[0]);线阿贾克斯开始之前。

您应该使用FormData上传使用ajax的文件。 $(form).serialize()会给你只是关键和价值。您可以使用下面的代码使用AJAX上传文件。

var formData = new FormData($(form)[0]); 
$.ajax({ 
    url: form.action, 
    type: form.method, 
    data: formData, 
    processData: false, 
    contentType: false, 

    success: function (response) { 

    } 
}); 
+0

非常感谢你的工作^ _ ^。 – Killua