如何对DPD取件点Select选项列表按国家、城市、商家排序分组
问题解答
需要对取件点数据集(你所说的domTree)进行排序分组处理,而且建议在后端控制器层面完成,而非前端DOM操作,原因及实现思路如下:
- 后端处理更高效:HttpClient获取DPD取件点数据后,直接在C#中完成排序分组逻辑,避免前端处理大量数据时的性能损耗,尤其当取件点数量较多时优势明显。
- 逻辑集中易维护:排序分组规则统一放在控制器中,和数据获取逻辑整合,后续调整排序维度或分组规则时,无需修改前端Razor视图代码。
- 适配Razor分组渲染:后端处理后可生成
countryCode→city→companyName层级的分组数据结构,Razor视图能借助optgroup标签轻松渲染成分组下拉列表,大幅提升用户查找效率。
后端处理示例(C#控制器代码)
假设取件点模型为ParcelShop,包含ParcelShopId、CountryCode、City、CompanyName属性:
// 通过HttpClient获取取件点列表 var parcelShops = await _httpClient.GetFromJsonAsync<List<ParcelShop>>("你的DPD API地址"); // 按countryCode、city、companyName排序并分组 var groupedShops = parcelShops .OrderBy(s => s.CountryCode) .ThenBy(s => s.City) .ThenBy(s => s.CompanyName) .GroupBy(s => new { s.CountryCode, s.City }) .ToList(); // 将分组数据传递给视图 ViewBag.GroupedParcelShops = groupedShops;
Razor视图渲染示例
<select name="SelectedParcelShopId" id="parcelShopSelect"> @foreach (var group in ViewBag.GroupedParcelShops as IEnumerable<IGrouping<dynamic, ParcelShop>>) { <optgroup label="@($"{group.Key.CountryCode} - {group.Key.City}")"> @foreach (var shop in group) { <option value="@shop.ParcelShopId">@shop.CompanyName</option> } </optgroup> } </select>
注:如果你的"domTree"指前端DOM结构,无需直接操作DOM排序分组;若指后端存储的取件点数据集,则必须对其做排序分组处理,才能实现需求中的下拉列表展示效果。
内容的提问来源于stack exchange,提问作者Andrus
相关产品推荐
相关产品推荐

