2016-01-13 2 views
0

У меня есть страница с многосегментным списком строк. Когда я выбираю несколько элементов и нажимаю «применить», я хочу сделать ajax-вызов и передать значения. Когда я отлаживаю метод в контроллере, параметр пуст.Метод контроллера ASP.NET для вызова ajax

HomeController

[HttpGet] 
public string GetTopLogEvents(string[] filters) 
{ 
    // ........ 
    return ""; 
} 

scripts.js

$('.js-event-level-filter-apply').on('click', function() { 
    var $this = $(this); 
    var $filterList = $('.js-event-level-filter'); 
    var filters = $filterList.val(); 

    var obj = { 
     filters: [] 
    }; 

    $.each(filters, function(key, value) { 
     obj.filters.push(value); 
    }); 

    $.ajax({ 
     type: "GET", 
     url: '/Home/GetTopLogEvents', 
     data: obj.filters, 
     success: function(data) { 
      console.log(data); 
     } 
    }); 
}); 

Если я ставлю точку останова в контроллере она попадает, но фильтры пуст. Что я делаю не так?

+0

Вы читали, как работает привязка параметров? – Amit

ответ

0

Возможно, вам нужно «подкрепить» ваш массив.

я бы в первую очередь изменить раздел АЯКС данных, чтобы выглядеть следующим образом:

data: {filters: obj.filters} 

Если это не сработает, я бы попробовать

data: {filters: stringify(obj.filters)} 

Точный синтаксис последнего может быть неправильно, пожалуйста, проверьте это.

+0

Итак, я использовал вторую версию, и теперь этот параметр проходит. Массив фильтров имеет одно значение, и он имеет значение [0] \t «[\" error \ ", \" warning \ "]" – jrock2004

+0

Когда вы нажимаете свое действие на контроллере, вы изучили объект Request, чтобы увидеть если значения там скрываются? Это должно позволить видеть необработанные данные, принимаемые сервером, чтобы гарантировать, что все параметры будут отправлены обратно. – Pheonyx

0

Можете ли вы открыть свой браузер, нажать F12 и поставить точку останова непосредственно на строку $ .ajax (в закладке файла на вкладке источников). Затем запустите этот метод. Когда поток остановится в точке останова, вы можете открыть вкладку консоли и ввести «obj.filters» и нажать enter.

Говорит ли это «неопределенный»?

Глядя на ваш код, он «не должен» быть неопределенным, но это, безусловно, будет хорошим началом.

Кроме того, строгая (JSON.stringify()) информация, которую вы отправляете, а затем выполнение вызовов JObject (C#), чтобы вернуть их обратно в массив объектов, может работать.

+0

obj.filters ["error", "warning", "info"] – jrock2004

+0

Простым способом для этого было бы взять ваш объект строковых значений, пройти цикл for, добавив их в одну строку с ограничителями каналов и передайте одну строку через AJAX. Затем проанализируйте его обратно в массив строк в C#, используя «string [] myList = ajaxPostData.Split ('|');" – Asyranok

Смежные вопросы