Iformfile 非法调用和空值
Iformfile Illegal invocation & Null Value
我目前正在同一个 ASP.NET 核心项目中从事 Web API 和 MVC 方面的工作。我正在尝试上传文件。但是我卡在了前端,因为数据只是 null 或非法调用
HTML
<form class="needs-validation" enctype="multipart/form-data" novalidate>
<input class="file-upload" type="file" name="file" size="40" accept=".png, .jpg, .jpeg, .gif">
<button class="btn btn-primary Save-Exit" type="button" onclick="return SaveExit()">Save and Exit</button>
</form>
JS
这里我注释掉了processData: false
,因为当它传递给客户端控制器
时,formVM 中的所有数据都会return 为空
function SaveExit() {
var GetImages = $('[name="file"]');
console.log(GetImages[0].files)
var data = {
Total: $("#Total").val(),
Attachments : GetImages[0].files
};
$.ajax({
url: "/Forms/InsertForm",
type: "Post",
'data': data,
'dataType': 'json',
//processData: false,
success: function (result) {
window.location.href = "/Reimbusments/Expense"
},
error: function (error) {
console.log(error)
}
})
return false;
}
客户端控制器:
[HttpPost]
public JsonResult InsertForm(FormVM formVM)
{
var sessionExpense = HttpContext.Session.GetString("ExpenseID");
var result = formRepository.InsertForm(formVM, sessionExpense);
return Json(result);
}
客户端回购:
public HttpStatusCode InsertForm(FormVM entity, string expensed)
{
entity.ExpenseId = Int32.Parse(expenseid);
StringContent content = new StringContent(JsonConvert.SerializeObject(entity), Encoding.UTF8, "application/json");
var result = httpClient.PostAsync(address.link + request + "FormInsert", content).Result;
return result.StatusCode;
}
查看模型class:
public class FormVM
{
public int FormId { get; set; }
public float? Total { get; set; }
public int ExpenseId { get; set; }
public IFormFile Attachments { get; set; }
}
我可以调用我的 API 控制器,但是因为 formVM 为空 API 不工作
您可以尝试使用以下代码:
js:
function SaveExit() {
var formData = new FormData();
formData.append("Total", $("#Total").val());
formData.append("Attachments", $('[name="file"]')[0].files[0]);
$.ajax({
url: "/Forms/InsertForm",
type: "Post",
data: formData,
processData: false,
contentType: false,
success: function (result) {
window.location.href = "/Reimbusments/Expense"
},
error: function (error) {
console.log(error)
}
})
return false;
}
结果:
我目前正在同一个 ASP.NET 核心项目中从事 Web API 和 MVC 方面的工作。我正在尝试上传文件。但是我卡在了前端,因为数据只是 null 或非法调用
HTML
<form class="needs-validation" enctype="multipart/form-data" novalidate>
<input class="file-upload" type="file" name="file" size="40" accept=".png, .jpg, .jpeg, .gif">
<button class="btn btn-primary Save-Exit" type="button" onclick="return SaveExit()">Save and Exit</button>
</form>
JS
这里我注释掉了processData: false
,因为当它传递给客户端控制器
function SaveExit() {
var GetImages = $('[name="file"]');
console.log(GetImages[0].files)
var data = {
Total: $("#Total").val(),
Attachments : GetImages[0].files
};
$.ajax({
url: "/Forms/InsertForm",
type: "Post",
'data': data,
'dataType': 'json',
//processData: false,
success: function (result) {
window.location.href = "/Reimbusments/Expense"
},
error: function (error) {
console.log(error)
}
})
return false;
}
客户端控制器:
[HttpPost]
public JsonResult InsertForm(FormVM formVM)
{
var sessionExpense = HttpContext.Session.GetString("ExpenseID");
var result = formRepository.InsertForm(formVM, sessionExpense);
return Json(result);
}
客户端回购:
public HttpStatusCode InsertForm(FormVM entity, string expensed)
{
entity.ExpenseId = Int32.Parse(expenseid);
StringContent content = new StringContent(JsonConvert.SerializeObject(entity), Encoding.UTF8, "application/json");
var result = httpClient.PostAsync(address.link + request + "FormInsert", content).Result;
return result.StatusCode;
}
查看模型class:
public class FormVM
{
public int FormId { get; set; }
public float? Total { get; set; }
public int ExpenseId { get; set; }
public IFormFile Attachments { get; set; }
}
我可以调用我的 API 控制器,但是因为 formVM 为空 API 不工作
您可以尝试使用以下代码:
js:
function SaveExit() {
var formData = new FormData();
formData.append("Total", $("#Total").val());
formData.append("Attachments", $('[name="file"]')[0].files[0]);
$.ajax({
url: "/Forms/InsertForm",
type: "Post",
data: formData,
processData: false,
contentType: false,
success: function (result) {
window.location.href = "/Reimbusments/Expense"
},
error: function (error) {
console.log(error)
}
})
return false;
}
结果: