首页 > 解决方案 > ASP.NET MVC - 无法在同一个 Ajax 发布调用中上传信息和文件

问题描述

我需要上传信息做一个数据库,我有我的控制器接收参数,然后我根据我的业务需要使用它们。

当我尝试仅上传参数时,它可以工作,但是当我尝试上传参数+文件上传中的上传文件时,它不起作用。

我试图改变代码的构建方式,但没有奏效

HTML:

<div class="box-body">
                <div class="row">
                    <div class="col-md-6">
                        <div class="form-group">
                            <label>Departamento</label>
                           @Html.DropDownList("Departamentos", (IEnumerable<SelectListItem>)ViewBag.Departamentos, "Selecione um Departamento", new { @class = "form-control select2", @id = "DDL_DEP", onchange = "FillBooks(this.value);" })

                        </div>
                        <!-- /.form-group -->

                        <!-- /.form-group -->

                        <div class="form-group">
                            <label>Tipo</label>
                            @Html.DropDownList("Tipo", (IEnumerable<SelectListItem>)ViewBag.Tipo, "Selecione um Tipo", new { @class = "form-control select2", @id = "DDL_TIPO" } )

                        </div>

                        <div class="form-group">
                            <label>Título do Ticket</label>
                            @Html.TextBox("TicketTitulo", null, new { @class = "form-control" })
                        </div>

                        <div class="form-group">
                            <label>Descrição do Ticket</label>
                            @Html.TextArea("TicketDesc", null, new { @class = "form-control", @style = "resize: Vertical; " })
                            </div>

                        <div class="form-group">

                                <label for="exampleInputFile">Anexo</label>
                                <input type="file" id="exampleInputFile">
                                <p class="help-block">Insira o seu anexo.</p>
                        </div>

                        <div class="box-footer">
                            <button type="submit" id="btn-save"  class="btn btn-primary pull-right">Guardar</button>
                            <button type="submit" class="btn btn-default">Voltar</button>

                        </div>

                        </div>
</div>

jQuery:

$(document).ready(function () {
          $("#btn-save").click(function (e) {
              var IdDep = $('#DDL_DEP').val();
              var IdTipo = $('#DDL_TIPO').val();
              var TituloTicket = $('#TicketTitulo').val();
              var DescTicket = $('#TicketDesc').val();
              var formData = new FormData();

              var file = document.getElementById("exampleInputFile").files[0];
              formData.append("exampleInputFile", file);

              $.ajax({ 
                  url: '@Url.Action("InsertTicket", "Tickets")',
                  type: "POST",
                  dataType: "JSON",
                  cache: false,
                  contentType: false,
                  processData: false,
                  data: { a: IdDep, b: IdTipo, c: TituloTicket, d: DescTicket, e: formData },
                  success: function (data) {

                  },
                  error: function (error) {
                     alert(error.responseText);
                  }
              });
          });
 })

控制器:

public ActionResult InsertTicket(int a, int b, string c, string d, HttpPostedFileBase e)
{
    // BUSINESS CODE THAT I CAN'T SHOW BUT IT DOESN'T MATTER
}

标签: c#asp.net-mvc

解决方案


尝试这个 :

$(document).ready(function () {

              $("#btn-save").click(function (e) {
                  var IdDep = $('#DDL_DEP').val();
                  var IdTipo = $('#DDL_TIPO').val();
                  var TituloTicket = $('#TicketTitulo').val();
                  var DescTicket = $('#TicketDesc').val();
                  var formData = new FormData();

                  var file = document.getElementById("exampleInputFile").files[0];
                  formData.append("e", file);
                   formData.append("a", IdDep );
                  formData.append("b", IdTipo);
                  formData.append("c", TituloTicket);
                  formData.append("d", DescTicket);

                  $.ajax({ 
                      url: '@Url.Action("InsertTicket", "Tickets")',
                      type: "POST",
                      dataType: "JSON",
                      cache: false,
                      contentType: false,
                      processData: false,
                      data:  formData ,
                      success: function (data) {

                      },
                      error: function (error) {
                         alert(error.responseText);
                      }
                  });
              });
     })

推荐阅读