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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:09:30