在ASP.NET jQuery AJAX POST中传递值数组

我的页面上有一个ListBox,我想制作一个包含所有选定项目的AJAXpost。 这是我的代码:

$('#btnSubmit').click(function() { $.ajax({ type: "POST", url: 'Default.aspx/GetSelectedValues', data: '{selectedValues: }', contentType: "application/json; charset=utf-8", dataType: "json", success: OnSuccess }); });  One Two Three Four  

我想将所选值传递为数组或逗号分隔的字符串。 传递数据的最佳方法是什么,我该怎么做?

要将其作为正确的JSON传递,您要查找的最终结果是:

 // Assuming 1, 2, and 4 are selected. { selectedValues: ['1', '2', '4'] } 

无论您序列化它,第一步是将所选值作为数组拉出。 jQuery的.val()使这比你期望的更容易:

 // Returns an array of #lbItems' selected values. var selectedValues = $('#lbItems').val() 

如果你正在寻找快速’n脏,你可以采取这种方式并构建一个像这样的JSON数组字符串:

 var json = '{ selectedValues: [' selectedValues.join(',') '] }'; 

将其传递到.NET JSON端点,该端点接受名为selectedValues (区分大小写)的数组/集合参数,应该可以完成您所追求的目标。 您可以将数组/集合指定为int或string类型,.NET将自动处理类型转换。

如果它比这复杂得多,我建议使用JSON.stringify()来构建JSON,而不是手工完成 。 较新的浏览器本机实现,但你需要在旧浏览器中包含json2.js(并且它不会伤害任何东西以包含在较新的浏览器中;如果可用的话,它会延迟它们的本机function)。

表单标签中的select元素是? 您可以序列化整个表单并轻松发送。

 var formdata = $('#formId').serialize(); 

然后在你的ajax电话中

 data: formdata, 

最近我处理了一个非常类似的问题。 我也在使用C#Web服务,但我正在处理的数据是完全动态的。 我必须找到一种方法来收集一个可变长度数组并将其作为单个JSON字符串传递(以及一些其他固定变量)。 我使用了来自http://json.org的JSON2库,并通过在所有需要的输入字段上放置某个类并使用title属性作为键来收集数据。

 var formdata = {}; $(".formInputField").each(function() { formdata[$(this).attr('title')] = $(this).val(); }); var mydata = JSON.stringify({ 'formdata': JSON.stringify(formdata), 'othervar' : otherVal1, 'othervar2' : otherVal2, 'othervar3' : otherVal3 }); 

然后我按照上面的方式通过了mydata

以其他方式传递它。 a = 1&a = 2&a = 3您可以使用jQuery serialize() http://api.jquery.com/serialize/