基于多个复选框过滤产品

问题描述 投票:0回答:1

我正在做电子商务网站。我想根据多个复选框过滤产品。我使用ajax。它发送复选框的ID到控制器。但是 selected 就像图片中的那样算零。这个代码有什么问题?enter image description here

Ajax:

 <script type="text/javascript">
    $(function () {
        $('.filterprod').click(function () {
            var ProdID = "";
            $('.checks').each(function () {
                if ($(this).is(':checked')) {
                    ProdID += $(this).val() + ",";
                }
            });
            var data = {};
            data.Id = ProdID.slice(0, ProdID.length - 1);
            $.ajax({
                url: '/Shop/GetProd',
                method: 'POST',
                dataType: "json",
                contentType: 'application/json',
                data: JSON.stringify(data),
                success: function (response) {
                    $("#Prodlist").remove();
                },
                error: function (err, response) {
                    console.log(err, response);
                    alert(err, response.responseText);
                }
            })
        });
    });
</script>

控制器。

  [HttpPost]
    public JsonResult GetProd(string Id)
    {
            var ids = new List<int>();
        IQueryable<Product> prods = null;
        if (!string.IsNullOrEmpty(Id))
        {
            for (int i = 0; i < Id.Split(',').Length; i++)
            {
                ids.Add(Convert.ToInt32(Id.Split(',')[i]));
            }
           prods =_context.Products.Where(t => ids.Contains(t.id));
        }
        else
        {
           prods = _context.Products.Take(5);
        }
        var selected = (from v in prods
                     select new
                     {
                         v.ProdName,
                         v.Price,
                         v.Description
                     }).ToList();

        return Json(selected, JsonRequestBehavior.AllowGet);

    }
c# asp.net entity-framework model-view-controller asp.net-ajax
1个回答
1
投票

尝试做这样的控制台。https:/dotnetfiddle.netAMwxiP。

using System;
using System.Collections.Generic;
using System.Linq;


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

   public string ProdName { get; set; }

   public decimal? Price { get; set; }

   public string Description { get; set; }
}

public class Program
{
 public static void Main(string[] args)
 {
    IQueryable<Product> products = (new List<Product> {
            new Product
            {
                Id = 1,
            },
            new Product
            {
                Id = 2,
            }
        }).AsQueryable<Product>();

    var Id = "1,2";
    var ids = new List<int>();
    IQueryable<Product> prods = null;
    if (!string.IsNullOrEmpty(Id))
    {
        for (int i = 0; i < Id.Split(',').Length; i++)
        {
            ids.Add(Convert.ToInt32(Id.Split(',')[i]));
        }
        prods = products.Where(t => ids.Contains(t.Id));
    }
    else
    {
        prods = products.Take(5);
    }
    var selected = (from v in prods
                    select new
                    {
                        v.ProdName,
                        v.Price,
                        v.Description
                    }).ToList();


    Console.WriteLine(selected.Count);

  }
}
© www.soinside.com 2019 - 2024. All rights reserved.