не работает отправка объекта ajax на контроллер

#c# #jquery #asp.net-mvc

#c# #jquery #asp.net-mvc

Вопрос:

Я просто хотел отправить список идентификационных номеров, собранных из значений флажков. Следующий пример кода, который я уже пробовал, но не работает, контроллер mvc не получает никаких значений Id. Пожалуйста, проверьте приведенный ниже код и скажите мне, что я здесь делаю не так.

 var _groupids = [];
$('input[class="groupids"]:checked').each(function() {
  _groupids.push(this.value);
});

var ticks = {};
$.each(_groupids, function(key, value) {
  ticks['Id'] = value;
});
console.log(ticks);

$.post('/MyController/Create', {
  groupIds: JSON.stringify(ticks)
}).done(function(data) {

});
  

Модель:

 namespace Demo.ViewModels
{
  public class Ppp
  {
    public int Id { get; set; }
  }
}
  

Контроллер:

 [HttpPost]
public ActionResult Create(List<Ppp> data)
{
  //want to get ajax value in `data`
}
  

Примечание: Я также пытался удалить JSON.stringify , но по-прежнему не получает никакого значения в контроллере

Я также пытался отправить это значение следующим образом ticks = '[{"Id": 1}, {"Id": 2}, {"Id": 3}]'; и все еще не получил никакого значения в контроллере

Ответ №1:

Здесь много проблем:

  1. ticks['Id'] = value использует один и тот же ключ на каждой итерации. Вы фактически переопределяете значение из предыдущей итерации.

  2. Однако это не помогло бы, потому что вам нужно опубликовать список, а вы публикуете объект, который выглядит примерно так: {"Id": 4} . Это ни в коем случае не список.

  3. Вы вызываете параметр groupIds в js, в то время как контроллер ожидает data .

Итак, вам нужно убедиться, что имена ваших параметров совпадают, и данные, которые вы отправляете, должны выглядеть следующим образом:

 [{"Id": 1}, {"Id": 2}, {"Id": 3}]
  

Вы можете сделать это, если ticks был массив, и на каждой итерации вставлялся новый объект.

Комментарии:

1. и this.value не возвращает id элемент

2. @demo, спасибо, и это тоже. Хотя я подозреваю, что автору на самом деле нужны значения, а не идентификатор

3. ОК. Хороший ответ. Но можете ли вы сказать мне, даже если я отправлю указанное вами значение на контроллер, он все равно не получит никаких идентификаторов. Нравится ticks = '[{"Id": 1}, {"Id": 2}, {"Id": 3}]'

4. @johnHuo, пожалуйста, уточните свой вопрос, как вы его отправляете

5. @johnHuo, это не то, что я имел в виду. «Как» означает, как вы используете это новое значение ticks. Скажем, если вы все еще опубликуете его как groupIds без переименования параметра контроллера, это все равно не сработает