Как я могу отправить массив строки на ASP.NET Контроллер MVC без формы?

Я создаю небольшое приложение, чтобы преподавать мне ASP.NET MVC и JQuery, и одна из страниц является списком объектов, в которых некоторые могут быть выбраны. Затем я хотел бы нажать кнопку и отправить Список (или что-то эквивалентное) к моему контроллеру, содержащему идентификаторы объектов, которые были выбраны, с помощью функции Сообщения JQuery.

Мне удалось получить массив с идентификаторами элементов, которые были выбраны, и теперь я хочу отправить это. Одним путем я мог сделать, это должно иметь фиктивную форму на моей странице, со скрытым значением, и затем устанавливать скрытое значение с выбранными пунктами и сообщение та форма; это выглядит неработоспособным, все же.

Существует ли более чистый способ достигнуть этого путем отправки массива непосредственно в контроллер? Я попробовал несколько разных вещей, но похоже, что контроллер не может отобразить данные, которые это получает. Вот код до сих пор:

function generateList(selectedValues) {
   var s = {
      values: selectedValues //selectedValues is an array of string
   };
   $.post("/Home/GenerateList", $.toJSON(s), function() { alert("back") }, "json");
}

И затем мой Контроллер похож на это

public ActionResult GenerateList(List<string> values)
{
    //do something
}

Все, что мне удалось получить, является "пустым указателем" в параметре контроллера...

Какие-либо подсказки?

180
задан tereško 12 July 2012 в 19:51
поделиться

2 ответа

Я изменил свой ответ для включения кода для тестового приложения, которое я сделал.

Обновление: Я обновил jQuery для установки 'традиционной' установки на истинный, таким образом, это будет работать снова (на ответ @DustinDavis').

Сначала JavaScript:

function test()
{
    var stringArray = new Array();
    stringArray[0] = "item1";
    stringArray[1] = "item2";
    stringArray[2] = "item3";
    var postData = { values: stringArray };

    $.ajax({
        type: "POST",
        url: "/Home/SaveList",
        data: postData,
        success: function(data){
            alert(data.Result);
        },
        dataType: "json",
        traditional: true
    });
}

И вот код в моем классе контроллера:

public JsonResult SaveList(List<String> values)
{
    return Json(new { Result = String.Format("Fist item in list: '{0}'", values[0]) });
}

, Когда я вызываю ту функцию JavaScript, я получаю предупреждение, говоря "Первый объект в списке: 'item1'". Надежда это помогает!

243
ответ дан MrDustpan 23 November 2019 в 06:12
поделиться

Не отправляйте данные как массив. Для привязки со списком пары ключ/значение должны быть отправлены с тем же значением для каждого ключа.

Вам не должна быть нужна форма, чтобы сделать это. Вам просто нужен список пар ключ/значение, которые можно включать в вызов к $ .post.

9
ответ дан Alastair Pitts 23 November 2019 в 06:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: