# 应用开发排错
# 概述
开发应用时,通常从模版拷贝并修改后挂载到模块菜单中。即使仔细修改,也常因疏忽导致应用功能异常。本节介绍最常见的几个问题及排查方法。
# 一、常见问题
# 问题1:列表为空(无数据行)
现象:成功添加数据后,列表仍然为空,没有显示任何数据行。
模拟演示:
- 正常状态下,设备登记模块显示2条数据(Max泵、野马水泵)
- 修改排序字段后,列表变为空
文件路径:wwwroot\Apps\samples\Device.js
// 第14-17行:缺省排序字段配置
sorters: {
property: 'StartDate', // 排序字段
direction: 'DESC'
}
错误原因: 从模版复制后,忘记修改排序字段。如果该字段在新应用中不存在,后台服务查询数据时使用该字段排序会出错。
修复方法:
将property改为新应用中实际存在的字段名。
# 问题2:列表有行数但列内容为空
现象:列表显示有数据行,但每一列的内容都是空的。
模拟演示:设备登记模块正常显示2行数据,修改数据实体后列表列内容为空。
文件路径:Web项目\Apps\Controllers\SampleDeviceController.cs
// 第19行:控制器继承的泛型类型
public class SampleDeviceController : AppControllerBase<SampleDevice>
错误原因: 从模版复制后,忘记修改数据库实体类型。导致使用了模版中原来的数据实体对应的表,列名对不上,所以显示为空。
修复方法:
将泛型类型<SampleDevice>改为新应用对应的数据实体类。
# 问题3:服务地址不匹配
现象:列表无法加载数据。
文件路径:
- 后台:
Web项目\Apps\Controllers\SampleDeviceController.cs - 前台:
wwwroot\Apps\samples\Device.js
后台服务地址:
// 第17行:后台服务路由
[Route("app/samples/device")]
前台服务地址:
// 第4行:前台调用的服务地址
serviceUrl: Yiez.$url('app/samples/device'),
错误原因:
- 前后台服务地址不匹配
- 前台服务地址指向不存在的路径
修复方法: 确保前后台服务地址完全一致。
# 二、排查方法
# 使用浏览器开发者工具排查
当遇到上述问题或其它异常时,可通过以下步骤排查:
打开开发者工具:在应用页面按
F12键切换到Network标签页:点击“网络”(Network) 标签页
刷新数据:点击应用列表底部的分页条,触发数据请求
查找请求:在网络请求列表中找到获取列表数据的请求
查看响应:点击该请求,查看“响应”(Response) 内容
效果: 如果后台服务出错,即使前台没有显示错误,响应中也会返回详细的错误信息。例如:
{
"success": false,
"errorMessage": "排序字段不存在"
}
# 三、排查清单
开发新应用时,从模版拷贝后重点检查以下三项:
| 检查项 | 位置 | 常见问题 |
|---|---|---|
| 排序字段 | 前台sorters配置 | 字段在新应用中不存在 |
| 数据实体 | 后台控制器泛型类型 | 使用了模版的旧实体 |
| 服务路由 | 前后台serviceUrl和Route | 地址不一致或路径错误 |
# 四、总结
以上三个常见问题,归根结底都是由于从模板拷贝后,前台配置与后台服务未能完全同步导致的。开发新应用时,重点检查:
- ✅ 排序字段:确保字段在新应用中存在
- ✅ 数据实体:改为新应用对应的实体类
- ✅ 服务路由:确保前后台地址一致
当发现问题时,先确认是否属于以上常见问题;如果不是,使用浏览器开发者工具的Network标签页查看响应内容,获取详细错误信息进行排查。