根据多个复选框过滤产品

时间:2020-05-23 10:21:31

标签: c# asp.net entity-framework model-view-controller asp.net-ajax

我正在电子商务网站上工作。我想根据多个复选框过滤产品。我用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);

    }

1 个答案:

答案 0 :(得分:1)

尝试在这样的控制台中进行操作:https://dotnetfiddle.net/AMwxiP

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);

  }
}
相关问题