Передача массива значений в ASP.NET jQuery AJAX POST - PullRequest
1 голос
/ 13 октября 2010

У меня есть 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 ]

2 голосов
/ 14 октября 2010

Чтобы передать это как правильный JSON, конечный результат, который вы ищете:

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

Как бы вы ни сериализовали его, первым шагом будет получение выбранных значений в виде массива. .val () в jQuery делает это проще, чем вы ожидаете:

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

Если вы ищете quick & n dirty, вы можете взять его и построить строку массива JSON, например:

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

Передача этого в конечную точку .NET JSON, которая принимает параметр массива / коллекции с именем selectedValues (с учетом регистра), должна выполнить то, что вам нужно. Вы можете указать массив / коллекцию как тип int или string, и .NET автоматически обработает преобразование типа.

Если это станет более сложным, я бы предложил использовать JSON.stringify () для построения JSON вместо того, чтобы делать это вручную . Более новые браузеры реализуют это изначально, но вам нужно будет включить json2.js в более старые браузеры (и не повредит ничего, чтобы включить это в более новые браузеры; при наличии он зависит от их собственной функциональности).

1 голос
/ 13 октября 2010

Является ли элемент select внутри тега формы? Вы можете сериализовать всю форму и легко отправить ее.

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

Тогда в вашем AJAX вызове

data: formdata,

-

Недавно я имел дело с очень похожей проблемой. Я также использую C # Web Service, но данные, с которыми я имею дело, полностью динамичны. Мне нужно было найти способ собрать массив переменной длины и передать его в виде одной строки JSON (вместе с некоторыми другими фиксированными переменными). Я использовал библиотеку JSON2 из http://json.org и собрал данные, поместив определенный класс во все нужные поля ввода и используя атрибут 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, как указано выше.

0 голосов
/ 13 октября 2010

Передайте это остальным способом. а = 1 & а = 2 & а = 3 Вы можете использовать jQuery serialize () http://api.jquery.com/serialize/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...