You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET MVC5中Kendo UI Grid刷新页面数据丢失问题求助

解决Kendo UI Grid刷新页面后无数据显示的问题

根据你描述的情况——首次加载正常,URL刷新后仅显示表格框架,重启程序才恢复——结合你的代码来看,我整理了几个最可能的原因和对应的解决方案:

1. 缺失详情模板导致Grid初始化失败

你的Grid代码里设置了.ClientDetailTemplateId("Test"),但我没看到对应的<script type="text/x-kendo-template" id="Test"></script>模板定义。Kendo Grid找不到这个模板时,会在初始化过程中静默失败,导致数据无法渲染。

解决方案:

  • 如果不需要详情展开功能,直接删除.ClientDetailTemplateId("Test")这一行;
  • 如果需要详情模板,添加对应的模板代码,比如:
<script type="text/x-kendo-template" id="Test">
    <div class="user-detail">
        <p>用户名:#= UserName #</p>
        <p>角色:#= Fakerole.FakeRoleName #</p>
    </div>
</script>

2. ViewData["defaultCategory"]刷新时未赋值

你的Grid数据源模型里,Fakerole字段的默认值依赖ViewData["defaultCategory"]:

model.Field(p => p.Fakerole).DefaultValue(ViewData["defaultCategory"] as FakeRoleViewModel);

首次加载页面时,你的控制器Action可能设置了这个ViewData,但刷新页面时,如果对应Action(比如MyUser/Index)没有重新赋值,ViewData["defaultCategory"]会为空,导致数据源初始化异常。

解决方案:
在页面对应的控制器Action中,确保每次请求都重新设置ViewData["defaultCategory"]:

public ActionResult Index()
{
    // 从数据库获取默认角色,确保每次请求都能拿到有效数据
    var defaultRole = db.FakeRoles.FirstOrDefault();
    ViewData["defaultCategory"] = defaultRole != null ? new FakeRoleViewModel
    {
        FakeRoleId = defaultRole.FakeRoleId,
        FakeRoleName = defaultRole.FakeRoleName
    } : null;

    return View();
}

3. Kendo UI脚本引用不完整或顺序错误

你的代码只引用了kendo.aspnetmvc.min.js,但这个脚本依赖Kendo的核心库(比如kendo.all.min.js)。首次加载时可能因为其他页面的缓存引用生效,但刷新后核心库未加载,导致Grid无法正常初始化。

解决方案:
调整脚本引用顺序,确保先加载Kendo核心库,再加载ASP.NET MVC适配脚本:

<script src="http://cdn.kendostatic.com/2013.3.1119/js/kendo.all.min.js"></script>
<script src="http://cdn.kendostatic.com/2013.3.1119/js/kendo.aspnetmvc.min.js"></script>

4. 调试Read Action确认数据返回正常

刷新页面时,Grid会触发EditingCustom_Read请求获取数据,你需要确认这个Action是否正常返回数据:

  • 打开浏览器开发者工具(F12),切换到Network面板,查看刷新时是否有EditingCustom_Read的请求;
  • 检查请求的状态码(应该是200)和返回的JSON数据是否包含用户列表;
  • 在EditingCustom_Read方法中添加断点或日志,确认方法被调用,且数据正确返回:
public ActionResult EditingCustom_Read([DataSourceRequest]DataSourceRequest request)
{
    // 日志记录,确认请求到达
    System.Diagnostics.Debug.WriteLine("EditingCustom_Read 被调用");

    var users = db.Users.Select(u => new UserViewModel
    {
        UserId = u.Id,
        UserName = u.UserName,
        password = u.PasswordHash, // 注意:实际项目不要返回明文密码!
        ConfirmPassword = u.PasswordHash,
        Fakerole = new FakeRoleViewModel
        {
            FakeRoleId = u.FakeRoleId,
            FakeRoleName = u.FakeRole.FakeRoleName
        }
    }).ToList();

    return Json(users.ToDataSourceResult(request));
}

5. 检查ServerOperation设置的影响

你的数据源设置了.ServerOperation(false),意味着客户端处理分页、排序等操作,EditingCustom_Read需要返回全部数据。如果你的Action返回的是分页后的数据,会导致Grid显示为空。

确认EditingCustom_Read中没有手动分页,直接返回完整的用户列表即可。

按照上面的步骤排查,应该能解决刷新后无数据的问题。如果还有疑问,可以贴出控制器Action的代码和浏览器Network面板的请求详情,我再帮你进一步分析。

内容的提问来源于stack exchange,提问作者Alejandro1991

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:18:22