Как передать массив элементов в качестве параметра хранимой процедуре в "MVC4 Razor"? - PullRequest
0 голосов
/ 23 сентября 2019

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

<script>
        $('.checked').click(function () {
               if (this.checked) {
                $.ajax({
                    type: "POST",
                    url: 'FilterByColor',
                    data: { minimum_range: $("#minid").val(), maximum_range: $("#maxid").val(), color: $(this).attr('id') }, //--> send id of checked checkbox on other page
                    success: function (vlist) {
                        $('#card-group').empty();
                        for (var i in vlist) {

                            $('#card-group').append($('<div class="col-lg-3 col-sm-6 p-0"><div class="card product-men p-3"><div class="men-thumb-item"><img src="' + vlist[i].img1 + '" id="imgfront" class="card-img-top"><div class="men-cart-pro"><div class="inner-men-cart-pro"><a href="#" id="quickview" class="link-product-add-cart">Quick View</a>/</div></div></div><!-- card body --><div class="card-body  py-3 px-2"><h5 class="card-title text-capitalize" id="mname">' + vlist[i].mname + '</h5><div class="card-text d-flex justify-content-between"><p class="text-dark font-weight-bold" id="mprize">' + vlist[i].mprize + '</p><p class="line-through" id="mdprize">' + vlist[i].mdprize + '</p></div></div><!-- card footer --><div class="card-footer d-flex justify-content-end"><h3> <a href="Purchase/AddToCarts?mid=' + vlist[i].mid + ',mrate=' + vlist[i].mrate + '" class="hub-cart phub-cart btn">Add To Cart</a></h3></div></div></div>'));
                        }
                        //alert('it worked');
                        //alert(data);
                        //$('#container').html(data);
                    },
                    error: function () {
                        alert('it broke');
                    },
                    complete: function () {
                        alert('it completed');
                    }
                });

            }
        });

    </script>

Контроллер

public List<items> GetProductByColor(int? minimum_range, int? maximum_range,string color)
        {
            List<items> vlist = new List<items>();
            using (SqlConnection con = new SqlConnection(constring))
            {
                using (SqlCommand cmd = new SqlCommand("getWproductByColor", con))
                {
                    cmd.CommandType = CommandType.StoredProcedure;
                    con.Open();
                    cmd.Parameters.AddWithValue("@sprize", minimum_range);
                    cmd.Parameters.AddWithValue("@eprize", maximum_range);
                    cmd.Parameters.AddWithValue("@color", color);
                    SqlDataReader reader = cmd.ExecuteReader();

                    while (reader.Read())
                    {
                        var g = new items()
                        {

                            mid = Convert.ToInt32(reader["mid"]),
                            mname = Convert.ToString(reader["mname"]),
                            mcode = Convert.ToString(reader["mcode"]),
                            mcolor = Convert.ToString(reader["mcolor"]),
                            mctype = Convert.ToString(reader["mctype"]),
                            mdetails = Convert.ToString(reader["mdetails"]),
                            mtype = Convert.ToString(reader["mtype"]),
                            mdprize = Convert.ToString(reader["mdprize"]),
                            mprize = Convert.ToString(reader["mprize"]),
                            mdate = Convert.ToDateTime(reader["mdate"]),//DateTime.ParseExact("reader['mdate']", "ddd MMM dd yyyy", CultureInfo.InvariantCulture),
                            msize = Convert.ToString(reader["msize"]),
                            mstock = Convert.ToString(reader["mcount"]),
                            img1 = Convert.ToString(reader["mimg1"]),
                            img2 = Convert.ToString(reader["mimg2"]),
                            img3 = Convert.ToString(reader["mimg3"])


                        };
                        vlist.Add(g);
                    }

                }
            }

            return vlist;
        }

Хранимая процедура

 ALTER PROCEDURE [dbo].[getWproductByColor]
@sprize int,
@eprize int,
@color char(50)
as

BEGIN
select mid,LTRIM(RTRIM(mtype))as mtype,LTRIM(RTRIM(mname))as mname,LTRIM(RTRIM(mdetails))as mdetails,LTRIM(RTRIM(mcode))as mcode,LTRIM(RTRIM(mcolor))as mcolor,msize,LTRIM(RTRIM(mctype)) as mctype,convert(date,mdate)as mdate,mdprize,mprize,mcount,mimg1,mimg2,mimg3  from [dbo].[material] where mtype='women' and (mdprize between @sprize AND @eprize)and mcolor=@color order by mdprize asc;
END
...