如果不在 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}