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