jQuery'change'不显示最新的数据

时间:2018-04-02 14:38:25

标签: javascript jquery asp.net-core

我有一个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>

问题是控制器方法仅在第一次选择时触及。例如,

  1. 第一次选择SITE 1时,控制器方法将返回与SITE 1对应的更新的标题列表

  2. 如果从下拉列表中选择了站点2,控制器将返回与站点2对应的更新的标题列表

  3. 用户在与SITE 1对应的数据库中添加/删除标题

  4. 用户返回表单并从下拉列表中选择SITE 1。该列表仍显示上述步骤1的结果,而不是步骤3的更新

  5. 如果我停止调试并重新启动,则选择现在将显示步骤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"}]
    

1 个答案:

答案 0 :(得分:0)

问题在于,正如@KevinB所指出的那样,正在从缓存中读取JSON结果。通过在更改函数

中添加以下行来解决此问题
$.ajaxSetup({ cache: false });