【问题标题】:Why my ajax is not sending image uploaded on the controller side? [duplicate]为什么我的 ajax 没有发送在控制器端上传的图像? [复制]
【发布时间】:2016-12-16 09:04:40
【问题描述】:

我正在使用 jquery ajax 将模型与图像一起发送到我的控制器。 这是我的表格。

  @using (Html.BeginForm(null, null, FormMethod.Post, new { id = "CreateUser" ,enctype = "multipart/form-data" } ))
        {

            @Html.AntiForgeryToken();
              @Html.ValidationSummary(true)
               <fieldset>
               <div class="row">
                    <div class="col-xs-6">
                        @*----FIRST NAME----*@
                        <label>
                            First Name <span class="text-red font12">*</span>
                        </label>
                        @Html.TextBoxFor(model => model.FirstName, new { @class = "form-control", id = "txtFirstName", @maxlength = "30" })
                    </div>


                    <div class="col-xs-6">
                        @*----LAST NAME----*@
                        <label>
                            Last Name <span class="text-red font12">*</span>
                        </label>

                        @Html.TextBoxFor(model => model.LastName, new { @class = "form-control", id = "txtLastName", @maxlength = "30" })
                    </div>

               <div class="col-xs-6">
                        @*----Logo Upload----*@

                        <label>
                           Logo Uploaad <span class="text-red font12">*</span>
                        </label>
                        <div class="input-group">


                            <input type="file" id="FileUpload1" />

                        </div>

                    </div>
                </div>

        <div class="row">
                    <div class="col-xs-4" style="float:right;">
                        <input type="button" value="Save" class="btn btn-primary btn-block btn-flat" onclick="validateandcreate();" />
                    </div>
                </div>

} 这是我的jQuery代码

function CreateUser() {

    var username = $("#txtUserName").val();

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

    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]);  
    }  


    debugger;
    if (username != "") {

        var model = {
            "FirstName": encodeURIComponent($("#txtFirstName").val()),
            "LastName": encodeURIComponent($("#txtLastName").val())
        };


        $.ajax({
            url: '/User/Create',
            method: 'post',
            dataType: 'json',
            data: { m: model, f: fileData },
            success: function (data) {
              alert("success");
            },
            error: function (err) {

               alert("error");
            }
        });
    }
}

如果我只发送模型,它工作得很好,但如果我将上传的图像连同它一起发送,它不会击中控制器。 这是我的控制器。

   [HttpPost]
    //[AuthorizationFilter]
   [ValidateAntiForgeryToken]
    public JsonResult Create(Models.Users user, HttpPostedFileBase file_Uploader)
    {
   //code
    }

【问题讨论】:

  • 注意你还需要给文件输入name="file_Uploader"

标签: javascript jquery ajax asp.net-mvc


【解决方案1】:

你需要在你的ajax上设置processData: falsecontentType: false通过jQuery.ajax()提交文件

您还可以将文件以外的数据添加到您的FormData

var formdata = new FormData();
formdata.append("file", fileobject);
formdata.append("model", JSON.stringify({
  name: "Johny",
  lastname: "Good"
}));

$.ajax({
  url: '/User/Create',
  method: 'post',
  dataType: 'json',
  contentType: false,
  processData: false,
  data: formdata,
  success: function(data) {
    alert("success");
  },
  error: function(err) {

    alert("error");
  }
});

Ajax File Uploads

【讨论】:

  • 但我想在单个 ajax 帖子中同时传递模型(名字,姓氏)和文件数据(上传的图像)
  • 只有当我将上传的图像发送到控制器时,上述解决方案才有效
  • 您可以在表单数据中添加任意数量的数据。将您的模态对象作为字符串化 json 附加到 formdata 并在服务器端解析它,或者将其键值对作为单独的键值对附加到 formdata 中。无论你喜欢哪个作品。我更新了显示如何将其他数据与文件一起发送的答案。
  • 我现在只在客户端收到此错误。即通过 ajax 发布时未定义 fdata
  • 我用过 var fdata = new FormData();虽然
猜你喜欢
  • 1970-01-01
  • 2021-08-22
  • 2015-10-15
  • 1970-01-01
  • 2021-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-25
相关资源
最近更新 更多