Member 9956700 Ответов: 1

Невозможно передать строковый массив из ajax в метод контроллера действий. Я получаю нулевой массив объектов в методе действия


У меня есть данные, которые являются строкой массива, я пытаюсь передать данные в контроллер MVC. Но я не могу получить данные, вместо данных я получаю object array null.

Что я уже пробовал:

var exportDataToCsv = function () {

    var array = [];
    var headers = [];
    $('#ButtlistTable th').each(function (index, item) {
        headers[index] = $(item).html();
    });
    $('#SearchButtlistTable tr').has('td').each(function () {
        var arrayItem = {};
        $('td', $(this)).each(function (index, item) {
                 arrayItem[headers[index]] = $(item).html();
        });
        array.push(arrayItem);
    });
    //var ExportedData = JSON.stringify(array);


    $.ajax({
        type: "POST",
        url: "/Buttlists/ExportDataToCsv",
        data: JSON.stringify({'ExportedData': array }),
        contentType: 'application/json; charset=utf-8',
        dataType: "json",
        success: function (data) {

            console.log(data);
        }
    });





}


Контроллер:

public ActionResult ExportDataToCsv(string[] ExportedData)
      {
          var array = ExportedData;
      }

Afzaal Ahmad Zeeshan

Как вы здесь прокладываете маршруты?

Member 9956700

Я использую маршрутизацию по умолчанию.

public static void RegisterRoutes(RouteCollection routes)
{
маршруты.IgnoreRoute("{resource}.axd/{*pathInfo}");

маршруты.MapRoute(
имя default",
url: "{controller}/{action}/{id}",
по умолчанию: новый { контроллера = "Главная", действие = "индекс", элемент ID = UrlParameter.Необязательный }
);
}

Kornfeld Eliyahu Peter

Может быть, вы посылаете не строковый массив, а объектный массив?

Member 9956700

Я пробовал и с тем, и с другим, но в контроллере я всегда получаю null массива или объектов.
Пример: я-3 значения. a[0] = "Яблоко a[1] = фрукт и a[2] = США.. в методе действия я всегда получаю a[0] = null a[1] = null a[2] = null.

1 Ответов

Рейтинг:
0

Richard Deeming

Ваш код Javascript не передает массив строк. Он передает массив объектов, каждый из которых содержит несколько свойств.

Например, вместо отправки:

["One", "Two", "Three"]
вы посылаете:
[
    {
        "Column1": "One",
        "Column2": "Two"
    },
    {
        "Column1": "Three",
        "Column2": "Four"
    },
    {
        "Column1": "Five",
        "Column2": "Six"
    }
]
Там нет никакого способа для ASP.NET чтобы сопоставить данные, которые вы отправляете, с массивом строк.

Либо измените код Javascript, чтобы отправить массив, который ожидает ваше действие, либо измените действие, чтобы принять данные, которые отправляет ваш код Javascript.


Member 9956700

Можете ли вы посоветовать мне, какие изменения необходимо внести в метод действия, чтобы получить вышеупомянутые данные?

Richard Deeming

Не совсем - я не знаю, что такое ваши исходные данные, или что вы делаете с ними.

NB: Если вы просто пытаетесь экспортировать таблицу в CSV, то вам не нужно отправлять данные на сервер; вы можете сделать это непосредственно из Javascript:
Использовать JavaScript, чтобы экспортировать данные в CSV - Крис Граймс[^]

Member 9956700

Спасибо Ричарду за Вашу поддержку. Но есть небольшой поворот - да, я пытаюсь экспортировать таблицу в CSV, но мне нужно открыть/показать диалоговое окно "Сохранить", с помощью которого я могу указать свое предпочтительное местоположение и имя файла.
Есть ли какой-нибудь способ, которым я могу продолжить?

Richard Deeming

Вы можете предложить имя файла, но вы не можете контролировать расположение, независимо от того, генерируете ли вы файл из Javascript или с сервера.