ASP.NET Core 2.2 - 2个选择表格字段之间的依赖关系。

问题描述 投票:0回答:1

我有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鲨鱼知道如何进行?

先谢谢你们了 :-)

c# asp.net ajax model-view-controller core
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.