我有一个要求,我想将excel文件上传到控制器,读取文件,处理其数据,然后将其发送回与JSON对象相同的视图。
我想使用AJAX调用来实现这一点,因为我想捕获其成功回调并根据收到的响应来操作DOM。我已经尝试了一些方法,但是无法击中控制器。对此有任何帮助。
下面显示的是我的 JS , HTML 和 C#代码:
function SubmitInfo() {
var formData = new FormData();
formData.append('file', $('#fileInput')[0].files[0]); // myFile is the input type="file" control
var _url = '@Url.Action("Upload", "CrossValidation")';
$.ajax({
url: _url,
type: 'POST',
data: formData,
processData: true, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: function (result) {
//manipulate DOM and bind response with Kendo grid
alert("result");
},
error: function (jqXHR) {
},
complete: function (jqXHR, status) {
}
});
}
<div class="col-md-4">
<input id="fileInput" type="file">
</div>
<div class="col-md-4">
<input type="submit" value="Upload file" onclick="SubmitInfo()"/>
</div>
public JsonResult Upload(IFormFile formData)
{
//Do something here....
return Json("");
}
答案 0 :(得分:2)
您发布的代码中存在两个明显的问题:
processData: true
。通过将其设置为true
(默认值),您要jQuery尝试将您提供的data
变成查询字符串,这不是您想要的。相反,您要将其设置为false
,这将要求jQuery将数据保留为空,并将其按原样传递给基础XMLHttpRequest
,其中数据将被正确格式化为multipart / form-数据。name
的{{1}}参数必须与ASP.NET Core MVC Controller中的formData.append
参数的名称匹配。您在前者中使用IFormFile
,在后者中使用file
,因此您需要更改其中一个,使它们相同。