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

时间:2010-10-13 17:00:54

标签: c# asp.net jquery ajax

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

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

<select id="lbItems" multiple="multiple">
    <option value="1">One</option>
    <option value="2">Two</option>
    <option value="3">Three</option>
    <option value="4">Four</option>
</select>

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

3 个答案:

答案 0 :(得分:2)

要将其作为正确的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将自动处理类型转换。

如果它变得更复杂,我建议using JSON.stringify() to build the JSON instead of doing it by hand。较新的浏览器本机实现,但是您需要在旧版浏览器中包含json2.js(并且在新版本中包含json2.js并不会造成任何损害;如果可用,它将遵循其原生功能)。

答案 1 :(得分:1)

表单标记内的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通过了。

答案 2 :(得分:0)

以其他方式传递。 α= 1和; A = 2及A = 3 您可以使用jQuery serialize()http://api.jquery.com/serialize/