首頁 > 後端開發 > C++ > 如何提高各州和城市的加載下拉列表的效率?

如何提高各州和城市的加載下拉列表的效率?

Linda Hamilton
發布: 2025-01-28 18:11:14
原創
659 人瀏覽過

How Can I Improve the Efficiency of Loading Dropdown Lists for States and Cities?

優化州和城市下拉列表加載效率的策略

直接在頁面加載時加載州和城市下拉列表的方法效率低下。本文將介紹更有效率和最佳實踐的方法。

推薦方法:

1. 使用視圖模型:

創建一個視圖模型,包含StateID、CityID、StateList和CityList屬性。這有助於封裝數據並提供強類型。

2. 使用非侵入式JavaScript:

避免在標記中使用內聯JavaScript。相反,使用非侵入式JavaScript來分離HTML和行為。

下拉列表修改:

HTML:

@Html.DropDownList(m => m.StateID, States, "选择州")  //移除onchange属性
@Html.DropDownListFor(m => m.CityID, Cities, "选择城市") //保留默认ID
登入後複製

JavaScript:

const url = '@Url.Action("GetCities", "Home")'; // 使用助手方法
const citiesDropdown = $('#CityID'); // 缓存元素

$('#StateID').change(function () {
  $.getJSON(url, { id: $(this).val() }, function (response) {
    // 清空并添加默认(null)选项
    citiesDropdown.empty().append($('<option></option>').val('').text('请选择'));

    $.each(response, function (index, item) {
      citiesDropdown.append($('<option></option>').val(item.Value).text(item.Text));
    });
  });
});
登入後複製

緩存優化:

如果渲染多個項目,並且它們的選項可能包含來自同一州的城市,可以使用緩存來避免重複的API調用。

const cache = {};

$('#StateID').change(function () {
  const selectedState = $(this).val();

  if (cache[selectedState]) {
    // 从缓存中渲染选项
    // ... 使用cache[selectedState]渲染城市下拉列表
  } else {
    $.getJSON(url, { id: selectedState }, function (response) {
      // 添加到缓存
      cache[selectedState] = response;

      // ... 使用response渲染城市下拉列表
    });
  }
});
登入後複製

無需Ajax的替代方法:

如果州和城市的數量有限,可以將所有城市傳遞到視圖中,並將其分配給JavaScript數組。但是,這可能會導致初始加載時間略長。

在控制器中:

model.CityList = db.Cities.Select(d => new { City = d.CountryID, Text = d.CityName, Value = d.Id }).ToList();
登入後複製

在視圖中 (JavaScript):

// 将所有城市分配给JavaScript数组
const allCities = JSON.parse('@Html.Raw(Json.Encode(Model.CityList))');

$('#StateID').change(function () {
  const selectedState = $(this).val();
  const cities = $.grep(allCities, function (item, index) {
    return item.CountryID == selectedState;
  });

  // 基于cities的值构建选项
  // ... 使用cities数组渲染城市下拉列表
});
登入後複製

以上是如何提高各州和城市的加載下拉列表的效率?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板