c# - 如何使用ajax将包含上传文件和字符串的数据对象发送到控制器?
问题描述
我正在使用 ajax 将包含上传文件数据和一些字符串值的对象数组发送到我的控制器,但发送失败。
我也尝试过使用 formdata 但没有运气。我想知道如何将数据发送到控制器。
jQuery/查看代码:
function SaveBrandDetail() {
debugger;
var data = new Array();
var tablecount = 0;
$(".DataRow").each(function () {
tablecount = tablecount + 1;
var row = {
"SaleStartDateString": $(this).find(".clsSaleStartDateForVal").val(),
"BrandDetailId": $(this).find(".clsBrandDetailId").val(),
"SaleExpiryDateString": $(this).find(".clsSaleEndDateForVal").val(),
"BrandId": $(this).find(".clsBrandId").val(),
"Amount": $(this).find(".clsAmount").val(),
"CategoryId": $(this).find(".clsSubCategoryId").val(),
"ParentCategoryId": $(this).find(".clsParentCategoryId").val(),
"fileUpload": $(this).find(".fileUploadData").get(0).files[0]
};
data.push(row);
});
$.ajax({
url: '@Url.Action("SaveData","Data")',
type: "POST",
dataType: 'json',
contentType: 'application/json;',
data: JSON.stringify(data),
success: function (msg) {
},
error: function () {
}
});
}
控制器文件:
public ActionResult SaveData(List<Data> data)
{
bool saved = false;
}
我希望在我的控制器中接收带有上传文件的数据。我已经在我的模态类中声明了 HttpPostedFileBase。
解决方案
var formData = new FormData();
$(".DataRow").each(function () {
tablecount = tablecount + 1;
var row = {
"SaleStartDateString": $(this).find(".clsSaleStartDateForVal").val(),
"BrandDetailId": $(this).find(".clsBrandDetailId").val(),
"SaleExpiryDateString": $(this).find(".clsSaleEndDateForVal").val(),
"BrandId": $(this).find(".clsBrandId").val(),
"Amount": $(this).find(".clsAmount").val(),
"CategoryId": $(this).find(".clsSubCategoryId").val(),
"ParentCategoryId": $(this).find(".clsParentCategoryId").val(),
"FileName": $(this).find(".fileUploadData").get(0).files[0].name
};
var file = $(this).find(".fileUploadData").get(0).files[0];
formData.append(file.name, file);
data.push(row);
});
formData.append("data", JSON.stringify(data));
$.ajax({
url: '@Url.Action("SaveData","Data")',
type: "POST",
dataType: 'json',
data: formdata,
processData: false,
contentType: false,
success: function (msg) {
},
error: function () {
}
});
public ActionResult SaveData(string data)
{
var files = Request.Files;
List<Data> d = JsonConvert.Deserialize<List<Data>>(data);
foreach(var item in d)
{
var file = files[item.FileName];
}
bool saved = false;
}
推荐阅读
- java - 如何在java中压缩一组给定的文件
- linux - 如何通过shell脚本从目录名称中删除特定前缀
- python - 如何更改一个文件中的所有代码,其中字符串等于 python 中另一个文件中的字符串。我会在例子中解释
- php - PDO->exec 处理分隔符
- javascript - 将 ASCII 值数组转换为一个字符串
- javascript - 使用 useEffect 钩子获取后 ReactJS 上下文重新渲染
- php - 如何在PHP中的字符串数组中获取某个数值?
- r - 使用 ODBC 包连接到 R 中的 SQL Server 到非默认端口
- ruby-on-rails - 如何在现有的属性轨上集成枚举
- postgresql - 如何使用 sqlmock 模拟 db.QueryRow