级联下拉列表,JSON 不会带来新记录

Cascading dropdown with JSON not bringing new records

本文关键字:新记录 下拉列表 JSON 级联      更新时间:2023-09-26

我有级联下拉列表来显示所选公司的联系人列表。使用JSON请求对所选公司的联系人的请求如下。

在视图上:

$('#companyId').change(function () {
        var selectedCompany = $(this).val();
        if (selectedCompany != null && selectedCompany != '') {
            $.getJSON('@Url.Action("Contacts")', { id: selectedCompany }, 
                           function (Contacts) {
                        var contactSelect = $('#contactId');
                        contactSelect.empty();
                        $.each(Contacts, function (index, contact) {
                        contactSelect.append($('<option/>', {
                        value: contact.value,
                        text: contact.text
                    }));
                });
            });
        }
    });

控制器:

public ActionResult Contacts(int id)
    {
        return Json(
            db.Contacts.Where(x=>x.deleted==false).
            Select(c => new { value = c.contactId, text = c.contactName, c.companyId }).
            Where(t => (int)t.companyId == id).OrderBy(x=>x.text),
            JsonRequestBehavior.AllowGet
        );
    }

这工作得很好。但是,此服务器端代码仅在首次为任何选定的公司执行(在第一个下拉列表中)。即。如果我选择ComanyA,然后选择公司B,然后再选择公司A,它不会从服务器中引入联系人列表,而是从缓存中填充。因此,新联系人不会按预期填充。

任何帮助都会很棒!

您需要在请求中添加一个随机数,以便浏览器每次都认为这是一个单独的调用。您可以将代码更改为:

$.getJSON('@Url.Action("Contacts")', { id: selectedCompany, n : Math.random() }, 
                           function (Contacts) {
                        var contactSelect = $('#contactId');
                        contactSelect.empty();
                        $.each(Contacts, function (index, contact) {
                        contactSelect.append($('<option/>', {
                        value: contact.value,
                        text: contact.text
                    }));
                });
            });

这是IE缓存问题,在客户端或服务器端几乎没有方法可以解决它。查看此问题以获取详细信息和食谱。$.getJSON 在 IE8 中返回缓存数据