AJAX 调用将除一个字段之外的所有字段传递给在 C# 中调用的方法

本文关键字:调用 字段 方法 AJAX 一个 | 更新日期: 2023-09-27 18:33:44

在我的cshtml中,我正在调用这个函数

function checkOutGroup(listOfIDs, listOfSites, itemType, controller)
在正确运行的 AJAX 调用之后,我有第二个 AJAX 调用

,它从成功函数中的第一个调用中获取一些数据并调用第二个 AJAX 调用。

if(!haveCheckedOutItems)
            {
                alert(listOfIDs[0] + " " + listOfIDs[1]);
                alert(listOfSites);
                $.ajax({
                    type: 'POST',
                    url: '/WorkQueues/CheckOutMultiple',
                    data: {idsToCheckOut: listOfIDs, listOfSites:listOfSites, itemType : itemType, controller: controller, checkIn : false},
                    datatype: 'json',
                    beforesend: function() {},
                    complete: function() {},
                    success: function(checkedOutItems) {....

在 cs 文件中,工作队列控制器具有一个名为 CheckOutMultiple 的方法,该方法具有以下方法签名:

public ActionResult CheckOutMultiple(List<int> idsToCheckOut, List<int> listOfSites, string itemType, string controller, bool checkIn)

在此代码中,idsToCheckOut 由于某种原因为 null,但传递的其他 4 件事具有所有正确的数据。我注意到除了在第一种方法中传递它的副本之外,对 listOfID 执行任何操作。

有什么想法吗?

编辑 1:来自 chrome networknig 选项卡的呼叫的解析版本是

    idsToCheckOut[]:72431
idsToCheckOut[]:56361
listOfSites[]:400216
listOfSites[]:549003
itemType:Visit
controller:Visits
checkIn:false

未解析的版本是:

idsToCheckOut%5B%5D=

72431&idsToCheckOut%5B%5D=56361&listOfSites%5B%5D=400216&listOfSites%5B%5D=549003&itemType=Visit&controller=Visits&checkIn=false

编辑2:不知何故,我设法以同样的方式打破了列表,无论我回到多远,我都无法撤消中断。

AJAX 调用将除一个字段之外的所有字段传递给在 C# 中调用的方法

更正:

您发到服务器的帖子使用的是表单的协议。这是因为您的 jquery 在发送到服务器时没有指定使用 json。

如果您想继续使用它正在使用的表单发布方法发布,似乎您需要告诉 jquery 使用数组值的传统方法发布,如此处所述。

使用表单:

$.ajax({
     type: 'POST',
     url: '/WorkQueues/CheckOutMultiple',
     data: {idsToCheckOut: listOfIDs, listOfSites:listOfSites, itemType : itemType, controller: controller, checkIn : false},
     ...
     traditional: true

使用 json:

$.ajax({
     type: 'POST',
     url: '/WorkQueues/CheckOutMultiple',
     data: {idsToCheckOut: listOfIDs, listOfSites:listOfSites, itemType : itemType, controller: controller, checkIn : false},
     ...
     contentType : "application/json; charset=utf-8"

如果可以验证调用脚本中的 listOfID 不为 null,则应使用您提供的模式正确序列化/反序列化。然而,让我印象深刻的一件事是,您没有用引号包围数据对象中的属性;有时,如果数据复杂,则以{ foo : bar }而不是{ "foo" : bar }甚至{ "foo" : JSON.stringify(bar) }的形式提供数据可能会带来问题。

我还注意到脚本和服务器方法签名之间有问题的变量的名称不同(布尔值除外,它可能默认为 false,因为它不可为空(。当变量名称匹配时,您可能会幸运地进入您的方法工作。