Kendo-MVC ListView默认选中首个项并加载详情的实现问题
解决Kendo ListView页面加载默认选中首项并加载详情的问题
核心思路是将详情加载逻辑抽离为独立函数,在onDataBound事件中判断数据存在后选中首项并调用该函数,无数据时直接跳过操作,同时保证手动选中和自动选中的逻辑一致。
修改后的代码片段
// 抽离详情加载逻辑为独立可复用函数 function loadJobDetails(dataItem) { $.ajax({ type: "GET", url:"@Url.Action("GetCard","User")", data: { id: dataItem.ID }, success: function (viewHTML) { $("#skeleton").hide(); $(".selected-item").html(viewHTML); }, error: function (errorData) { console.log(errorData) } }); } function onChange(e) { var selected = e.sender.select(); var dataItem = e.sender.dataItem(selected[0]); loadJobDetails(dataItem); // 调用统一的加载逻辑 } function onDataBound(e) { var listView = e.sender; var data = listView.dataSource.data(); // 无数据时直接返回,不执行任何操作 if (data.length === 0) { return; } // 选中当前页的首个列表项 var firstItem = listView.content.children().first(); listView.select(firstItem); // 获取对应数据项并加载详情 var firstDataItem = listView.dataItem(firstItem); loadJobDetails(firstDataItem); } // 其余原有函数保持不变 function searchCriteria() { return { countyName: $("#countyName").val(), jobType: $("#jobType").val() }; } $("#btnSubmit").click(function () { $("#jobsListView").data("kendoListView").dataSource.read(); }); $("#btnClear").click(function () { $("#JobTitle").val(''); $("#countyName").val(''); $("#jobType").val(''); $("#divName").val(''); $("#jobsListView").data("kendoListView").dataSource.read(); });
关键说明
- 独立函数复用:将AJAX加载详情的逻辑抽成
loadJobDetails,避免重复代码,确保手动选中和自动选中的行为完全一致 - 无数据判断:在
onDataBound中先检查数据源长度,为空时直接返回,符合需求 - 可靠获取实例与数据:通过
e.sender直接获取ListView实例,比重新查询DOM更高效;用listView.dataItem(firstItem)准确获取选中项的完整数据,解决原代码无法获取ID的问题 - 兼容搜索场景:后续点击搜索或清空按钮重新加载数据时,
onDataBound会自动执行,选中新数据的首项并加载详情,适配动态数据变化
内容的提问来源于stack exchange,提问作者Tronics
相关产品推荐
相关产品推荐

