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

Posted

技术标签:

【中文标题】在 ASP.NET jQuery AJAX POST 中传递值数组【英文标题】:Passing an array of values in an ASP.NET jQuery AJAX POST 【发布时间】:2011-04-24 23:25:08 【问题描述】:

我的页面上有一个 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>

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

【问题讨论】:

【参考方案1】:

要将其作为正确的 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(',') '] ';

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

如果它变得比这更复杂,我建议using JSON.stringify() to build the JSON instead of doing it by hand。较新的浏览器本机实现了这一点,但您需要在较旧的浏览器中包含 json2.js(在较新的浏览器中包含它并没有什么坏处;如果可用,它会遵循它们的本机功能)。

【讨论】:

完美,这正是我想要的。谢谢!【参考方案2】:

选择元素是否在表单标签内?您可以序列化整个表单并轻松发送。

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

【讨论】:

【参考方案3】:

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

【讨论】:

好的,我正在使用它,并且该数据以“lbItems=1&lbItems=3”的形式传递。有没有一种简单的方法可以将这些值反序列化为 C# 中的数组?

以上是关于在 ASP.NET jQuery AJAX POST 中传递值数组的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET 2.0 JQuery AJAX 登录

ASP.NET MVC 中的 ASP.NET AJAX 与 jQuery

JQuery Ajax 在asp.net中使用总结

使用 JQuery $.AJAX 调用调用 ASP.NET 函数

在 ASP.NET 控件上使用 ajax/jQuery 表单验证

将 jQuery 用于 AJAX 与 ASP.NET Webforms [关闭]