【问题标题】:Cascading dropdown with JSON not bringing new records使用 JSON 的级联下拉列表不带来新记录
【发布时间】:2012-06-14 14:02:56
【问题描述】:

我有级联下拉菜单来显示所选公司的联系人列表。使用 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
        );
    }

这很好用。但是,此服务器端代码仅对任何选定的公司(在第一个下拉列表中)首次执行。 IE。如果我选择 ComanyA,然后是 CompanyB,然后再次选择 CompanyA,它不会从服务器中获取联系人列表,而是从缓存中填充。因此,新联系人没有按预期填充。

任何帮助都会很棒!

【问题讨论】:

    标签: c# javascript jquery json asp.net-mvc-3


    【解决方案1】:

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

    $.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
                        }));
                    });
                });
    

    【讨论】:

      【解决方案2】:

      这是 IE 缓存问题,在客户端或服务器端解决它的方法很少。检查此问题以获取详细信息和食谱。 $.getJSON returning cached data in IE8

      【讨论】:

        猜你喜欢
        • 2019-07-05
        • 2012-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-17
        • 1970-01-01
        相关资源
        最近更新 更多