Как передать значение из списка выбора enum в контроллер для фильтрации результатов - PullRequest
0 голосов
/ 18 июня 2019

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

//View
@model List<Merchandise>

@{
    ViewData["Title"] = "Variant Summary";
}

<header>
    <nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
        <div class="container">
            <h2>Variant Summary</h2>
            @Html.DropDownList("Countries", new SelectList(Enum.GetValues(typeof(Countries))))             
        </div>
    </nav>
</header>

//Model
 public class Merchandise
    {
        public string Id { get; set; }
        //g.PlanSeqId, g.ItemId, g.ItemDescription, g.OrderQuantity, g.OrderSldTdy, g.PlannedMinutesQty, g.ActualMinutesQty
        public int PlanSeqId { get; set; }
        public int ItemId { get; set; }
        public string ItemDescription { get; set; }
        public int OrderQuantity { get; set; }
        public int OrderSldTdy { get; set; }
        public int PlannedMinutesQty { get; set; }
        public int ActualMinutesQty { get; set; }
        public Countries Countries { get; set; }
    }

    public enum Countries
    {
        USA, EUR, JPN
    }

//Controller
public IActionResult Merchandise()
        {            
            Countries selCountry = Countries.USA;
            switch (selCountry)
            {
                case Countries.USA:
                    var bucket = _bucketProvider.GetBucket("MerchUSA");
                    var n1ql = @"SELECT META(g).id, g.PlanSeqId, g.ItemId, g.ItemDescription, g.OrderQuantity, g.OrderSldTdy, g.PlannedMinutesQty, g.ActualMinutesQty
                                FROM `MerchUSA` g
                                WHERE g.CompanyId = 0;
                                LIMIT = 20;";
                    var query = QueryRequest.Create(n1ql);
                    var results = bucket.Query<Merchandise>(query);
                    return View(results.Rows);
                case Countries.EUR:
                    var bucket2 = _bucketProvider.GetBucket("MerchEUR");
                    var n1ql2 = @"SELECT META(g).id, g.PlanSeqId, g.ItemId, g.ItemDescription, g.OrderQuantity, g.OrderSldTdy, g.PlannedMinutesQty, g.ActualMinutesQty
                                FROM `MerchEUR` g
                                WHERE g.CompanyId = 1;
                                LIMIT = 20;";
                    var query2 = QueryRequest.Create(n1ql2);
                    var results2 = bucket2.Query<Merchandise>(query2);
                    return View(results2.Rows);
                case Countries.JPN:
                    var bucket3 = _bucketProvider.GetBucket("MerchJPN");
                    var n1ql3 = @"SELECT META(g).id, g.PlanSeqId, g.ItemId, g.ItemDescription, g.OrderQuantity, g.OrderSldTdy, g.PlannedMinutesQty, g.ActualMinutesQty
                                FROM `MerchJPN` g
                                WHERE g.CompanyId = 2;
                                LIMIT = 20;";
                    var query3 = QueryRequest.Create(n1ql3);
                    var results3 = bucket3.Query<Merchandise>(query3);
                    return View(results3.Rows);
            }
            return View();
        }

Сейчас я просто вижу раскрывающийся список со странами, но в контроллер не передается значение для фильтрации результатов.

1 Ответ

0 голосов
/ 18 июня 2019

Как прокомментировал Аммар, вы должны передать значение выпадающего списка по запросу.Попробуйте использовать ajax для вызова метода Merchandise и отправки выбранного значения в формате строки запроса.

Просмотр

@Html.DropDownList("Countries", new SelectList(Enum.GetValues(typeof(Countries))),new  { @id="dropdownlist"})

@section Scripts
{
  <script type="text/javascript">
    $("#dropdownlist").change(function () {
        var select = $("#dropdownlist").val();
        $.ajax({
            type: "get",
            url: "/YourController/Merchandise?select=" + select,
            success: function () {
                alert("ok");
            }
        });
    });
  </script>
}

Контроллер

public async Task<IActionResult> GetAccommodation(Countries select)
{
        switch (select)
        {
            case Countries.USA:
               // the stuff you want
        }
 }
...