【问题标题】:Parameter contains a NULL entry when it isn't during AJAX call参数在 AJAX 调用期间不包含 NULL 条目
【发布时间】:2020-01-07 05:56:08
【问题描述】:

我需要实现上传文件并保存与 orderItemID 相关的功能(我可以得到)。问题是没有获得 ID 或使用 ID 将文件保存到数据库。问题是将此 ID(我可以注销并查看是否存在)传递给控制器​​以供使用,如果不是,参数继续返回 NULL。

我最初尝试在上传文档时将 orderItemID 作为第二个参数传递,但这导致 HttpPostedFileBase 和 orderItemID 的 int 在我进入该方法后立即返回为 NULL。

我尝试通过 ViewBag 传递 orderItemID。功能,但它再次返回为 NULL

我现在正在尝试进行第二次单独的 AJAX 调用,它只是传入一个 int (orderItemID),然后在控制器中我可以尝试其他事情,但现在我只想看到参数不返回为 NULL当我在 orderController 中遇到断点时。

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

实际:NULL

错误:参数字典包含方法“Void SetCurrentOrderItemID(Int32)”的不可空类型“System.Int32”的参数“orderItemID”的空条目

【问题讨论】:

  • 嗨,你能不能给你的 C# 控制器代码?
  • 您确定 cOrderItemID 不为空吗?
  • C#控制器中的SetCurrentOrderItemID方法已包含在本帖中,还是需要更多?
  • @AfshinRashidi 是的,当它尝试在控制器中输入 SetCurrentOrderItemID 方法时,它会将参数恢复为 null
  • 尝试在控制器中使用字符串参数进行测试并给我结果

标签: javascript c# html ajax viewbag


【解决方案1】:

AJAX 参数中的“数据”属性应如下所示:

data: "cOrderItemID=" + cOrderItemID

编辑:

删除这一行:

contentType: false,

【讨论】:

  • 不幸的是,我仍然收到与此建议相同的错误。
【解决方案2】:

使用这种格式:

data : {OrderItemID : cOrderItemID}

【讨论】:

    【解决方案3】:

    默认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}),
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-25
      • 1970-01-01
      • 2012-12-09
      相关资源
      最近更新 更多