OutSystems蠕虫养殖管理器应用中交易表网格From与To列数据重复显示问题排查与修复咨询
我开发的应用为蠕虫养殖管理器(Worm Farming Manager),包含3张数据表,当前在交易表(Transaction table)模块中遇到问题:我通过交易表搭建(scaffolded)了对应的交易屏幕,在该屏幕添加交易条目后,网格(Grid)的From和To列显示了相同的容器信息,但在TransactionDetails页面中数据显示正常。例如,当我执行将10只蛹从容器B转移至容器C的操作后,网格的From列和To列均显示为容器B。请问该如何修复此问题?
更新说明:以下为GetTransactions方法相关内容。
兄弟,我之前也碰到过脚手架自动生成UI导致关联数据绑定出错的情况,结合你的描述,问题大概率出在网格列的绑定逻辑或者交易列表的查询加载上,给你几个具体的排查和修复方向:
检查网格列的绑定字段是否混淆
脚手架生成的Grid很可能在自动映射关联数据时,把From和To列的绑定表达式搞混了。你可以打开交易列表页面的前端代码(比如Blazor的razor文件、ASP.NET MVC的视图文件),找到Grid的列定义部分,确认From列绑定的是Transaction.FromContainer.xxx,To列绑定的是Transaction.ToContainer.xxx,而不是两个列都绑定了同一个From容器的属性。排查GetTransactions方法的关联数据加载逻辑
既然详情页显示正常,说明数据库里的交易数据是正确的(From和To的容器ID没问题),问题出在列表查询时的关联数据加载。你可以检查GetTransactions方法,看是否正确同时加载了From和To对应的容器:// 错误示例:只加载了FromContainer,ToContainer没加载,导致To列复用了From的数据 return _context.Transactions.Include(t => t.FromContainer).ToList(); // 正确写法:同时加载两个关联容器 return _context.Transactions.Include(t => t.FromContainer).Include(t => t.ToContainer).ToList();另外也要注意,如果用了投影查询(Select),有没有不小心把ToContainer的属性赋值给了From的字段,这也会导致显示错误。
验证Transaction实体类的关联关系配置
确认你的Transaction实体中,From和To容器的导航属性与外键是否正确对应:public class Transaction { public int Id { get; set; } // From容器的外键 public int FromContainerId { get; set; } public Container FromContainer { get; set; } // To容器的外键 public int ToContainerId { get; set; } public Container ToContainer { get; set; } // 其他交易属性... }如果外键和导航属性的对应关系写错了(比如ToContainer的外键用了FromContainerId),查询时就会拉错关联数据。
清理缓存后重新测试
有时候脚手架生成的代码会有编译缓存,或者浏览器缓存了旧的页面逻辑。你可以先清空项目的bin/obj文件夹,重新编译运行,同时清空浏览器缓存后再测试添加交易的操作,排除缓存导致的显示异常。
内容的提问来源于stack exchange,提问作者Ranjith Varatharajan

