如果不在 AJAX 调用期间,参数包含 NULL 条目
Parameter contains a NULL entry when it isn't during AJAX call
我需要实现上传文件并保存与 orderItemID(我可以获得)相关的功能。问题不是获取 ID 或使用 ID 将文件保存到数据库。问题是将这个 ID(我可以注销并看到它在那里)传递到控制器中然后使用,参数继续返回 NULL,当它不是时。
我最初尝试在上传文档时将 orderItemID 作为第二个参数传递,但这导致 HttpPostedFileBase 和 orderItemID 的整数在我进入该方法后立即返回为 NULL。
我试过通过 ViewBag 传递 orderItemID。功能,但它再次返回为 NULL
我现在正在尝试进行第二个单独的 AJAX 调用,它只是传入一个 int (orderItemID),然后在控制器中我可以尝试其他操作,但现在我只想看看当我在 orderController 中遇到断点时,参数没有返回为 NULL。
View:
$('#confirmUploadDiagrambtn').on("click", function () {
var currentID = document.getElementsByName("orderitemid")[0].value;
var form = $("#file")[0].files[0];
var datastring = new FormData();
datastring.append('file', form);
//Order Item ID is logged out as the expected 12121
console.log("OrderID: " + currentID);
//Errors out saying parameter is NULL
setOrderItemID(currentID);
uploadDocument(datastring);
})
function setOrderItemID(cOrderItemID) {
$.ajax({
type: "POST",
url: '/Order/SetCurrentOrderItemID',
data: cOrderItemID,
contentType: false,
processData: false,
success: function (response) {
console.log('Item Success');
console.log(response);
},
error: function (status) {
console.log('Item Error');
console.log(status);
}
})
}
Controller:
[HttpPost]
public void SetCurrentOrderItemID(int orderItemID)
{
//I can try whatever later, just need the param to not be NULL
ViewBag.cOrderItemID = orderItemID;
}
预计:orderItemID 将等于 12121
实际:空
错误:参数字典包含方法 'Void SetCurrentOrderItemID(Int32)'
的不可为空类型 'System.Int32' 的参数 'orderItemID' 的空条目
"data" 属性 在 AJAX 参数中应该是这样的:
data: "cOrderItemID=" + cOrderItemID
编辑:
删除这一行:
contentType: false,
默认情况下 int
参数假定来自查询字符串,您可以将 url 更改为:
function setOrderItemID(cOrderItemID) {
$.ajax({
type: "POST",
url: '/Order/SetCurrentOrderItemID?orderItemID=' + cOrderItemID,
contentType: false,
processData: false,
success: function (response) {
console.log('Item Success');
console.log(response);
},
error: function (status) {
console.log('Item Error');
console.log(status);
}
})
}
否则您可以使用 [FromBody]
属性标记参数:
[HttpPost]
public void SetCurrentOrderItemID([FromBody] int orderItemID)
{
//I can try whatever later, just need the param to not be NULL
ViewBag.cOrderItemID = orderItemID;
}
然后将您的数据参数更新为:
data: JSON.stringify({orderItemId: cOrderItemID}),
使用这种格式:
data : {OrderItemID : cOrderItemID}
我需要实现上传文件并保存与 orderItemID(我可以获得)相关的功能。问题不是获取 ID 或使用 ID 将文件保存到数据库。问题是将这个 ID(我可以注销并看到它在那里)传递到控制器中然后使用,参数继续返回 NULL,当它不是时。
我最初尝试在上传文档时将 orderItemID 作为第二个参数传递,但这导致 HttpPostedFileBase 和 orderItemID 的整数在我进入该方法后立即返回为 NULL。
我试过通过 ViewBag 传递 orderItemID。功能,但它再次返回为 NULL
我现在正在尝试进行第二个单独的 AJAX 调用,它只是传入一个 int (orderItemID),然后在控制器中我可以尝试其他操作,但现在我只想看看当我在 orderController 中遇到断点时,参数没有返回为 NULL。
View:
$('#confirmUploadDiagrambtn').on("click", function () {
var currentID = document.getElementsByName("orderitemid")[0].value;
var form = $("#file")[0].files[0];
var datastring = new FormData();
datastring.append('file', form);
//Order Item ID is logged out as the expected 12121
console.log("OrderID: " + currentID);
//Errors out saying parameter is NULL
setOrderItemID(currentID);
uploadDocument(datastring);
})
function setOrderItemID(cOrderItemID) {
$.ajax({
type: "POST",
url: '/Order/SetCurrentOrderItemID',
data: cOrderItemID,
contentType: false,
processData: false,
success: function (response) {
console.log('Item Success');
console.log(response);
},
error: function (status) {
console.log('Item Error');
console.log(status);
}
})
}
Controller:
[HttpPost]
public void SetCurrentOrderItemID(int orderItemID)
{
//I can try whatever later, just need the param to not be NULL
ViewBag.cOrderItemID = orderItemID;
}
预计:orderItemID 将等于 12121
实际:空
错误:参数字典包含方法 'Void SetCurrentOrderItemID(Int32)'
的不可为空类型 'System.Int32' 的参数 'orderItemID' 的空条目"data" 属性 在 AJAX 参数中应该是这样的:
data: "cOrderItemID=" + cOrderItemID
编辑:
删除这一行:
contentType: false,
默认情况下 int
参数假定来自查询字符串,您可以将 url 更改为:
function setOrderItemID(cOrderItemID) {
$.ajax({
type: "POST",
url: '/Order/SetCurrentOrderItemID?orderItemID=' + cOrderItemID,
contentType: false,
processData: false,
success: function (response) {
console.log('Item Success');
console.log(response);
},
error: function (status) {
console.log('Item Error');
console.log(status);
}
})
}
否则您可以使用 [FromBody]
属性标记参数:
[HttpPost]
public void SetCurrentOrderItemID([FromBody] int orderItemID)
{
//I can try whatever later, just need the param to not be NULL
ViewBag.cOrderItemID = orderItemID;
}
然后将您的数据参数更新为:
data: JSON.stringify({orderItemId: cOrderItemID}),
使用这种格式:
data : {OrderItemID : cOrderItemID}