c# - 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
}
解决方案
尝试这个 :
$(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);
}
});
});
})
推荐阅读
- css - CSS嵌套在网格布局内的minmax
- c# - 存储过程的 SQL GroupBy 导致错误
- python - 从元组列表中获取一列
- python - 从数据框中提取专有名称
- java - 获取 java.util.List 的泛型类型
> - ios - 注销后具有组的用户默认值返回错误值
- javascript - 仅通过 svg 蒙版中的孔单击
- azure - 来自现有 vnet 和所有相关资源的 Arm 模板 -VM
- arrays - 需要Powershell阵列,不知道怎么做,求指导
- javascript - Vanilla JS - 使用 const 代替 getElementById 等性能好吗?