【问题标题】:Input type file not getting serialized in jquery ajax [duplicate]输入类型文件未在jquery ajax中序列化[重复]
【发布时间】:2018-03-06 02:49:16
【问题描述】:

以下是我在提交时将表单返回到 jquery 函数时的剃须刀代码。

 @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;
    }

【问题讨论】:

    标签: javascript jquery json ajax asp.net-mvc


    【解决方案1】:

    尝试下面的代码并在 ajax 代码中做一些更改。在代码中添加以下参数。

    processData: false,
    contentType: false,
    

    并在 ajax 开始之前添加 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) {
    
        }
    });
    

    【讨论】:

    • 非常感谢它成功了^_^。
    • 谢谢它也帮助了我
    • formData 是否将 key、value 与文件一起发送,或者我们必须将 formData 值和 Serialize 值一起发送?
    猜你喜欢
    • 1970-01-01
    • 2016-02-07
    • 2010-10-29
    • 1970-01-01
    • 2013-05-18
    • 2011-08-29
    • 2016-05-15
    • 1970-01-01
    相关资源
    最近更新 更多