Как правильно отобразить массив из тела, возвращающий нулевое количество в asp.net ядро

#c# #jquery #arrays #asp.net-core #razor

#c# #jquery #массивы #asp.net-core #razor

Вопрос:

У меня есть jquery на странице razor, собирающий проверенные идентификаторы и передающий их контроллеру в asp.net основное приложение.

Jquery работает нормально, но я всегда получаю нулевое количество в контроллерах.

Я попробовал некоторые из приведенных здесь примеров. Я также использую [frombody], это даже ударило по контроллеру

   $('#Delete').click(function () {
            var fav = [];
            $.each($("input[name='ID']:checked"), function () {
                fav.push($(this).val());
            });
            $.ajax({
                type: "post",
                url: "/Loan/Delete",
                dataType: "json",
                data: JSON.stringify(fav),
                success: function (result) {
                }
            })

        });
  

контроллер
В контроллерах количество идентификаторов равно нулю

    public void DeleteStatementsRoles(ICollection<Products> ids){}
  

Я думаю, я делаю что-то не так

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

1. При отправке только json вам необходимо установить соответствующий ContentType

2. Я добавил « ContentType: «application / json; charset = utf-8»,« также не сработало

3. Ооо … у вас есть favorite данные, но массив назван fav . Обязательно проверьте ошибки в консоли инструментов разработчика браузера, которые бы выбрасывали их туда

4. Я исправил, теперь я могу получить массив в консоли Array(2) 0: "1" 1: "2" , но все еще не добираюсь до контроллера

5. Не могли бы вы, пожалуйста, поделиться своей моделью продукта? И как вы спроектировали свою favorite переменную.

Ответ №1:

Вот рабочая демонстрация:

Модель:

 public class Products
{
    public int Id { get; set; }
}
  

Вид:

 <form>
    <input name="ID" type="checkbox" value="1"/>
    <input name="ID" type="checkbox" value="2"/>
   <input type="button" id="Delete" value="delete" />
</form>

@section Scripts
{
    <script>
        $('#Delete').click(function () {
            var fav = [];
            $.each($("input[name='ID']:checked"), function () {
                var obj = {};              //change here...
                obj.Id = $(this).val()
                fav.push(obj);
            });
            $.ajax({
                type: "post",
                url: "/Home/Delete",
                contentType: "application/json",  //add this..
                dataType: "json",
                data: JSON.stringify(fav),
                success: function (result) {
                }
            })

        });
    </script>
}
  

Контроллер:

 public class HomeController : Controller
{
    [HttpPost]
    public void Delete([FromBody] ICollection<Products> ids) 
    { 
         //do your stuff...
    }
}
  

Результат:

введите описание изображения здесь

Другая ситуация: поскольку я не уверен, какова ваша модель, вот также рабочая демонстрация, модель которой содержит список.

Модель:

 public class Products
{
    public List<int> Id { get; set; }
}
  

Вид:

 <form>
    <input name="ID" type="checkbox" value="1"/>
    <input name="ID" type="checkbox" value="2"/>
   <input type="button" id="Delete" value="delete" />
</form>

@section Scripts
{
    <script>
        $('#Delete').click(function () {
            var fav = [];
            $.each($("input[name='ID']:checked"), function () {
                fav.push($(this).val());
            });
            var favarite = [];     //add...
            favarite.push({ id: fav });
            
            $.ajax({
                type: "post",
                url: "/Home/Delete",
                contentType: "application/json",   //add this...
                dataType: "json",
                data: JSON.stringify(favarite),
                success: function (result) {
                }
            })

        });
    </script>
}
  

Результат:
введите описание изображения здесь

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

1. Моя модель похожа на первый пример. как только я помещаю [FromBody] , он не попадает в контроллер. если я удалю [FromBody] , то контроллер попаданий будет равен нулю

2. Убедитесь, что вы добавили contentType: "application/json" в свой ajax.

3. Я предлагаю, чтобы вы могли поделиться своей моделью и всем представлением razor с помощью jQuery. Это поможет вам быстрее решить проблему.

4. Razor огромен, другое дело, что я попробовал IFormCollection и получил « «[{«Идентификатор»:»1″},{» Идентификатор»:»2″}]» « Возможно, мне придется поделиться им в конечном итоге

5. Я думаю, вам нужно скопировать весь мой код в свой проект. Возможно, вы что-то упустили в своем проекте. Убедитесь, что добавляете contentType: "application/json" в свой ajax и добавляете [FromBody] в своем действии.