我有一个jQuery change
函数,用于从Titles
下拉列表的用户选择中填充Site
的下拉列表
$("#SiteID").on("change", function() {
var titleUrl = '@Url.Content("~/")' + "Form/GetTitles";
var ddlsource = "#SiteID";
$.getJSON(titleUrl, { SiteID: $(ddlsource).val() }, function(data) {
var items = "";
$("#TitleID").empty();
$.each(data, function(i, title) {
items +=
"<option value='" + title.value + "'>" + title.text + "</option>";
});
$("#TitleID").html(items);
});
});
控制器返回填充另一个下拉列表的JSON对象。
public JsonResult GetTitles(int siteId)
{
IEnumerable<Title> titleList;
titleList = repository.Titles
.Where(o => o.SiteID == siteId)
.OrderBy(o => o.Name);
return Json(new SelectList(titleList, "TitleID", "Name"));
}
标记是:
<select id="SiteID" asp-for="SiteID" asp-items="@Model.SiteList" value="@Model.Site.SiteID" class="form-control"></select>
<select id="TitleID"></select>
问题是控制器方法仅在第一次选择时触及。例如,
第一次选择SITE 1时,控制器方法将返回与SITE 1对应的更新的标题列表
如果从下拉列表中选择了站点2,控制器将返回与站点2对应的更新的标题列表
用户在与SITE 1对应的数据库中添加/删除标题
用户返回表单并从下拉列表中选择SITE 1。该列表仍显示上述步骤1的结果,而不是步骤3的更新
如果我停止调试并重新启动,则选择现在将显示步骤3中的更新。
jQuery .change() only fires on the first change中描述的类似行为,但我希望有一个更好的解决方案,而不是停止使用jQuery id
JSON响应是:
[{"disabled":false,"group":null,"selected":false,"text":"Title2","value":"2"},{"disabled":false,"group":null,"selected":false,"text":"Title3","value":"1002"},{"disabled":false,"group":null,"selected":false,"text":"Title4","value":"2004"},{"disabled":false,"group":null,"selected":false,"text":"Title5","value":"3"},{"disabled":false,"group":null,"selected":false,"text":"Title6","value":"9004"}]
答案 0 :(得分:0)
问题在于,正如@KevinB所指出的那样,正在从缓存中读取JSON结果。通过在更改函数
中添加以下行来解决此问题$.ajaxSetup({ cache: false });