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:不知何故,我设法以同样的方式打破了列表,无论我回到多远,我都无法撤消中断。
更正:
您发到服务器的帖子使用的是表单的协议。这是因为您的 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,因为它不可为空(。当变量名称匹配时,您可能会幸运地进入您的方法工作。