ASP. NET Core 2.2 - зависимость между 2 полями формы выбора - PullRequest
0 голосов
/ 29 мая 2020

У меня есть 2 поля выбора.

Одно показывает список элементов:

<select id="itemlist" asp-for="WorkTask.ItemId" asp-items="@Model.itemList.ToSelectListItem(Model.WorkTask.ItemId)"></select>

Одно показывает список клиентов:

<select id="customerlist" asp-for="WorkTask.CustId" asp-items="@Model.customerList.ToSelectListItem(Model.WorkTask.CustId)"></select>

Я с помощью метода расширения для заполнения полей выбора, которые выглядят следующим образом:

        public static IEnumerable<SelectListItem> ToSelectListItem<T>(this IEnumerable<T> items, int selectedValue)
        {
            return from item in items
                   select new SelectListItem
                   {
                       Text = item.GetPropertyValue("Name"),
                       Value = item.GetPropertyValue("Id"),
                       Selected = item.GetPropertyValue("Id").Equals(selectedValue.ToString())
                   };
        }

Когда я выбираю элемент в первом поле выбора, мне нужно просмотреть список клиентов (в основном это только один) выбранный элемент принадлежит и показывает это в последнем поле выбора.

В нижней части окна MVC у меня есть следующий код:

    <script>
        function updateCustomerList() {
            var itemSelected = document.getElementById("itemlist").value;

            $list = $('#customerlist');

            $.ajax({
                url: '/Admin/WorkTask/GetCustomer/' + itemselected,
                type: 'GET',
                dataType: 'text',
                success: function (data) {
                    results = JSON.parse(data);

                    $list.html('');
                    for (i in results) {
                        $list.append('<option value="' + i + '">' + results[i].text + '</option>');
                    }
                }
            });
        }

        $(document).ready(function () {
            updateCustomerList();
        });

        $('#itemlist').on("change", function () {
            updateCustomerList();
        });

    </script>

В контроллере (WorkTask ) У меня есть следующее действие:

        [ActionName("GetCustomer")]
        public async Task<IActionResult> GetCustomer(int id)
        {
            List<Customer> customers = new List<Customer>();

            var item = await _db.Item.FindAsync(id);
            var customer = await _db.Customer.Where(q => q.NavNumber == item.NavNumber).FirstOrDefaultAsync();
            if (customer == null)
            {
                customers = await (from Customer in _db.Customer
                                   select Customer).ToListAsync();
            }
            else
            {
                customers = await (from Customer in _db.Customer
                                   where Customer.Id == Customer.Id
                                   select Customer).ToListAsync();
            }

            return Json(new SelectList(customers, "Id", "Name"));
        }

Когда я запускаю проект и выбираю вариант в списке элементов, ничего не происходит. Я не получаю ошибок и не знаю, что делать дальше. Я попытался распечатать значения с предупреждением, но не могу получить значения из вызова Ajax.

Оба поля выбора просто заполнены элементами и клиентами, так что это работает. Это просто зависимость, которая не работает.

Когда это сработает, я попытаюсь заставить работать и наоборот - когда я выбираю клиента в последнем поле выбора, он должен показывать мне только предметы, принадлежащие выбранному клиенту.

Я новичок в коде Ajax, так что, может быть, один из вас Ajax -харк знает, как действовать?

Заранее спасибо: - )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...