C# 我试图使用ajax调用将上传的文件从视图发送到控制器,但该文件在控制器中被接收为null
我正在使用ajax从html视图向控制器发送一个上传的文件,但该文件在控制器中被接收为空 我尝试使用FormData,但没有任何结果,或者可能我没有正确使用它,当我使用html.BeginForm()发送文件时,它在控制器中被正确读取,但我不想使用表单,因为它在提交后会打开另一个页面 下面是我的控制器C# 我试图使用ajax调用将上传的文件从视图发送到控制器,但该文件在控制器中被接收为null,c#,jquery,html,ajax,asp.net-mvc,C#,Jquery,Html,Ajax,Asp.net Mvc,我正在使用ajax从html视图向控制器发送一个上传的文件,但该文件在控制器中被接收为空 我尝试使用FormData,但没有任何结果,或者可能我没有正确使用它,当我使用html.BeginForm()发送文件时,它在控制器中被正确读取,但我不想使用表单,因为它在提交后会打开另一个页面 下面是我的控制器 public void Upload_SCN_CA_File(FormCollection formCollection) { if (Request != null) {
public void Upload_SCN_CA_File(FormCollection formCollection)
{
if (Request != null)
{
HttpPostedFileBase file = Request.Files["UploadedFile"];
if ((file != null) && (file.ContentLength > 0) && !string.IsNullOrEmpty(file.FileName))
{
string fileName = file.FileName;
Debug.WriteLine(fileName);
string fileContentType = file.ContentType;
byte[] fileBytes = new byte[file.ContentLength];
var data = file.InputStream.Read(fileBytes, 0, Convert.ToInt32(file.ContentLength));
}
}
}
下面是jQueryAjax调用
$("#upload").on("click",function () {
$.ajax({
type: "POST",
url: "/Order/Upload_SCN_CA_File",
data: {
enctype: 'multipart/form-data'
},
success: function (response) {
if (response.result == false) {
swal("Error", response.message, "error");
}
else {
swal("Success", response.message, "success");
}
}
});
});
下面是我的html视图
<form>
<div class="row">
<div class="col">
<input name="UploadedFile" id="upfile" type="file" />
</div>
</div>
<div class="row">
<div class="col">
<div class="btn btn-primary rounded" id="upload" style="margin:8px">Upload</div><br>
</div>
</div>
</form>
上传
我希望文件能正确地发送到控制器,以便我能正确地读取它,但它被接收为null您必须使用传递请求中的表单内容。例如,您可以在单击处理程序中收集它
const form = $(this).closest('form').get(0)
const data = new FormData(form)
然后将以下内容传递给ajax
调用
data: data,
processData: false,
contentType: false
而不是
data: {
enctype: 'multipart/form-data'
},
processData:false
使jquery将FormData实例未经修改地传递给XHR,这是文件上传工作所必需的<代码>内容类型:false将使浏览器自动设置多部分/表单数据
内容类型
FormData现在在较旧的浏览器中不起作用,也就是说,您可以像下面的代码一样传递数据
$("#form0").submit(function (event) {
var dataString;
event.preventDefault();
event.stopImmediatePropagation();
var action = $("#form0").attr("action");
if ($("#form0").attr("enctype") == "multipart/form-data") {
dataString = new FormData($("#form0").get(0));
contentType = false;
processData = false;
} else {
// regular form, do your own thing if you need it
}
$.ajax({
type: "POST",
url: action,
data: dataString,
dataType: "json",
contentType: contentType,
processData: processData,
success: function (data) {
},
error: function (jqXHR, textStatus, errorThrown) {
}
});
});
数据:{enctype:'multipart/form data'},
-您似乎没有将该文件包含在您的后可能副本中,谢谢它工作正常,但我遇到了相同的早期问题,在控制器中上载和读取该文件并将响应返回到视图中的ajax之后,局部视图消失,父视图重新加载,您有什么解决方案吗?您必须在新问题中详细描述此问题。您在此线程中没有提到任何局部视图或父视图。这里我们处理对div的单击,在这里我们只发送一个AJAX请求。这不可能单独导致某些视图消失或某些视图重新加载。