Как я могу фильтровать записи в базе данных по ASP.NET по выпадающему списку?

#asp.net #asp.net-mvc #database #entity-framework

#asp.net #asp.net-mvc #База данных #entity-framework

Вопрос:

Я пытаюсь отфильтровать свои записи из таблицы, созданной с помощью Entity Framework, где я хочу, чтобы она показывала мои записи с определенным условием.

У меня есть этот контроллер с именем ProductoesController, который принадлежит модели Productos и имеет следующие атрибуты:

         [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int idProducto { get; set; }
        public String nombre { get; set; }
        public String descripcion { get; set; }
        public float precio { get; set; }
        //ENUMS ---------------------
        [EnumDataType(typeof(Talle))]
        public Talle talle { get; set; }
        [EnumDataType(typeof(ColorProducto))]
        public ColorProducto ColorProd { get; set; }
        [EnumDataType(typeof(CategoriaProducto))]
        public CategoriaProducto CategoriaProd { get; set; }

        public int CurrentNegocioId { get; set; }
        public Negocio Negocio { get; set; }
 

Это перечисление, которое я хочу использовать для фильтрации загруженных продуктов:

 namespace MVCShopping.Models {
    public enum ColorProducto {
        ROJO,
        ROSA,
        VERDE,
        AMARILLO,
        NEGRO,
        BLANCO,
        GRIS
    }
}
 

Я создал Viewbag.colors в индексном методе контроллера, где он создает список с загруженными перечислениями

         public async Task<IActionResult> Index()
        {
            ViewBag.colors = new SelectList(Enum.GetNames(typeof(ColorProducto)), ColorProducto.AMARILLO);
            return View(await _context.Producto.ToListAsync());
        }
 

Мой Index.cshtml имеет следующее содержимое:

 @model IEnumerable<MVCShopping.Models.Producto>

@{
    ViewData["Title"] = "Index";
}

<h1>Index</h1>

<p>
    <a asp-action="Create">Create New</a>
</p>

<table class="table">

    @Html.DropDownList("ColorProducto", (ViewBag.colores as SelectList))

    <thead>
        <tr>
            <th>
                @Html.DisplayNameFor(model => model.nombre)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.descripcion)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.precio)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.talle)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.ColorProd)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.CategoriaProd)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.CurrentNegocioId)
            </th>
            <th></th>
        </tr>
    </thead>
    <tbody>
        @foreach (var item in Model) {
            <tr>
                <td>
                    @Html.DisplayFor(modelItem => item.nombre)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.descripcion)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.precio)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.talle)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.ColorProd)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.CategoriaProd)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.CurrentNegocioId)
                </td>
                <td>
                    <a asp-action="Edit" asp-route-id="@item.idProducto">Edit</a> |
                    <a asp-action="Details" asp-route-id="@item.idProducto">Details</a> |
                    <a asp-action="Delete" asp-route-id="@item.idProducto">Delete</a>
                </td>
            </tr>
        }
    </tbody>
</table>
 

Я добавил @Html.DropDownList("ColorProducto", (ViewBag.colores as SelectList)) строку, но я не знаю, как настроить это, чтобы фильтровать мои записи по моему выбору.
Это скриншот того, как он показывает:
введите описание изображения здесь

Как мне закодировать записи таблицы, чтобы они отображались только в том случае, если ColorProd имеет то же значение, что и этот выпадающий список?

Большое вам спасибо!

Ответ №1:

Таблица в формате html

 <div class="table-responsive">
                <table class="table table-hover table-bordered mb-0 text-center" id="detailsTable">
                    <thead style="background-color:#f1f1f1;">
                        <tr>
                            <th style="width:10%;">ItemID</th>
                            <th style="width:40%">Item Name</th>
                            <th hidden="hidden" style="width:8%;">Unite No</th>
                            <th style="width:10%">Unite Name</th>
                            <th hidden="hidden" style="width:10%">F</th>
                            <th style="width:10%">Count</th>
                            <th style="width:10%">Price</th>
                            <th style="width:10%">Total</th>
                        </tr>
                    </thead>
                    <tbody id="contacts"></tbody>
                </table>
            </div>
 

Используйте Ajax в представлении

   $('#BLDItemID').bind('change', function () {
        $("#detailsTable tbody tr").remove();
        $('#BLDCount').val(1);
        $("#ITMNM").val('');
        $("#ItemEXP").val('');
            $.ajax({
            url: '@Url.Action("RefrishItemList", "Manufacturings")',
            type: "GET",
            contentType: "application/json; charset=utf-8",
            data: { id: $("#BLDItemID").val() },
            dataType: "json",
            success: function (data) {
                var row = '';
                var PRS = '';
                var dtExpert = '';
                $.each(data, function (index, item) {
                    row  = '<tr><td>'   item.Id   '</td><td>'   item.Name   '</td><td hidden="hidden">'   item.Unite   '</td><td>'   item.UnitName   '</td><td hidden>'   item.UnTOT   '</td><td>'   item.Count   '</td><td>'   item.Price   '</td><td>'   item.Total   '</td></tr>';
                    PRS = item.ITPrice;
                    dtExpert = item.ITDTEXP;
                });
                $("#contacts").html(row);
                $("#BLDPrice").val(PRS);
                $("#ItemEXP").val(dtExpert);
                $("#ITMNM").val($("#BLDItemID option:selected").text());
             },
            error: function (result) {
                alert("Error");
            }
           });
    })
 

в управлении

  public JsonResult RefrishItemList(int? id)
    {
         string DTExprVL = "";
        var ITMPrice = db.TBLItems.Where(s => s.ItemID == id).Select(x => x.ItemInvoicePR).FirstOrDefault();
        var EXPDT = db.TBLItems.Where(s => s.ItemID == id).Select(x => x.ItemNoticeDateActive).FirstOrDefault();
        if (EXPDT == true)
        {
            DTExprVL = "1";
        }
        else
        {
            DTExprVL = "0";
        }
        var CusList = db.TBLColecteItems.Include(t => t.TBLItem).Include(t => t.TBLItem1).Where(s => s.TMainItemID == id).Select(x => new
        {
            Id = x.TBLItem1.ItemID,
            Name = x.TBLItem1.ItemName,
            Unite = x.TUnite,
            UnitName = x.TBLUnite.UnitesName,
            UnTOT = x.TUnTOT,
            Count = x.TCount,
            Price = x.TPrice,
            Total = x.TTotal,
            ITPrice = ITMPrice,
            ITDTEXP = DTExprVL
        }).ToList();
        return Json(CusList, JsonRequestBehavior.AllowGet);
    }
 

просто измените параметры