DotVVM - GridViewDataSet无数据加载:Facade方法未调用
排查Facade方法未调用导致GridViewDataSet条目始终为0的问题
嘿,我来帮你揪出这个问题的根源!从你给出的代码片段和描述来看,核心线索已经很明显了,咱们一步步来梳理:
首先看你当前的Init()方法——缺了最关键的一步!
你在Init()里只初始化了GridViewDataSetItems的分页和排序配置,但完全没有调用_favouriteCommodityFacade去获取数据并填充到数据集里!这就像你准备了一个空购物袋,却没去货架上拿商品,自然袋子里始终是空的(条目为0)。
对比你那个正常工作的ViewModel,它的Init()方法里肯定有类似这样的逻辑:
public override async Task Init() { // 初始化数据集配置 GridViewDataSetItems = new GridViewDataSet<FavouriteCommodityDTO>() { PagingOptions = { PageSize = PageSize }, SortingOptions = DefaultSortOptions }; // 关键:调用Facade获取数据并填充到数据集 var favouriteResult = await _favouriteCommodityFacade.GetFavouriteCommoditiesAsync( GridViewDataSetItems.PagingOptions, GridViewDataSetItems.SortingOptions ); GridViewDataSetItems.Items = favouriteResult.Items; GridViewDataSetItems.TotalCount = favouriteResult.TotalCount; }
接下来的排查&修复步骤:
- 直接对比正常ViewModel的代码:把它的
Init()方法和当前的逐行对比,重点找它调用对应Facade、填充数据集的代码块,把这部分逻辑复制过来,适配FavouriteCommodityFacade的方法名和参数。 - 确认
Init()方法真的被触发了:在Init()开头加个断点或者Console.WriteLine("FavouriteVM Init called!"),验证页面加载时这个方法是否真的执行了——如果Init都没跑,那后续的Facade调用根本不可能发生。 - 检查Facade的依赖注入是否正常:确保
_favouriteCommodityFacade通过构造函数注入后不是null,如果是null的话,调用方法会抛异常(不过你没提到异常,大概率不是这个问题,但还是要确认下)。 - 单独验证Facade方法的有效性:如果加上调用代码后还是没数据,可以写个简单的测试代码,直接调用
_favouriteCommodityFacade的方法,看是否能拿到预期的FavouriteCommodityDTO列表——排除Facade本身的逻辑问题。
最后再提一句:
既然你说有个“几乎完全相同的ViewModel”能正常工作,那差异99%就在数据填充的那几行代码上,别漏了把Facade返回的结果赋值给GridViewDataSetItems的Items和TotalCount哦!
内容的提问来源于stack exchange,提问作者Martin
相关产品推荐
相关产品推荐

