【问题标题】:Passing an array of values in an ASP.NET jQuery AJAX POST在 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>

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

【问题讨论】:

    标签: c# asp.net jquery ajax


    【解决方案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# 中的数组?
      猜你喜欢
      • 2013-02-07
      • 2017-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      • 2015-03-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多