级联下拉列表,JSON 不会带来新记录
Cascading dropdown with JSON not bringing new records
我有级联下拉列表来显示所选公司的联系人列表。使用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 中返回缓存数据
相关文章:
- 根据另一个字段选择获取新值后更新下拉列表内容
- 使用按钮创建新的下拉列表
- 如何创建具有预定义值的下拉列表,但也应该有将新值添加到列表中的选项
- 级联下拉列表,JSON 不会带来新记录
- 如何加载使用下拉列表生成的新页面更改
- 如何保存具有多个选择下拉列表的 html 表单的选择历史记录
- 使用 AsyncPostBackTrigger 填充现有下拉列表,而不是填充新的下拉列表
- 防止在经过不同的菜单项时打开新的下拉列表
- 从下拉列表中选择项目后,显示新选项并显示文本
- 如何将在新窗口中创建的新元素的数据返回到下拉列表中
- 从下拉列表中选择的值到具有根据第一个值的新值的新下拉列表中
- 用填充的下拉列表复制php表的新行
- 对加载相关下拉列表的性能影响,最多约30000条记录
- JavaScript:为什么新的下拉列表没有填充值
- ui选择如何从多选下拉列表中的文本中添加新选项
- Select2下拉列表允许在用户键入时按用户显示新值
- 页面.EnableEventValidation = false不识别新的下拉列表值
- 如何在单击按钮时添加新的下拉列表
- 使用jQuery在更改事件上创建新的下拉列表
- 在 ASP 中添加新的下拉列表,而无需重新加载页面