0

選択した会社の連絡先のリストを表示するカスケード ドロップダウンがあります。選択した企業の連絡先のリクエストは、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 を選択した後、CompanyB を選択し、CompanyA を再度選択すると、サーバーから連絡先リストが取得されず、キャッシュから取り込まれます。したがって、新しい連絡先は期待どおりに入力されません。

どんな助けでも素晴らしいでしょう!

4

2 に答える 2

1

これはIEのキャッシュの問題であり、クライアント側またはサーバー側で解決する方法はいくつかあります。詳細とレシピについては、この質問を確認してください。$.getJSONがIE8でキャッシュされたデータを返す

于 2012-06-14T14:21:18.790 に答える
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
                    }));
                });
            });
于 2012-06-14T14:13:31.523 に答える