C# Asp.Net核心缓存标记帮助程序仍然调用页面处理程序?

C# Asp.Net核心缓存标记帮助程序仍然调用页面处理程序?,c#,html,asp.net-core,caching,C#,Html,Asp.net Core,Caching,处理者 public void OnGet() { Menus = _context.Menus .AsNoTracking() .ToList(); } 在页面上~ <card> <card-header icon="fas fa-cubes" title="Atalhos"> </card-header> <card-body>

处理者

    public void OnGet()
    {
        Menus = _context.Menus
            .AsNoTracking()
            .ToList();
    }
在页面上~

<card>
    <card-header icon="fas fa-cubes" title="Atalhos">
</card-header>
    <card-body>
        <cache expires-after="@TimeSpan.FromHours(8)">
            <div class="list-group">
                @foreach (var item in Model.Menus)
                {
                    <a asp-page="@item.Url" class="list-group-item list-group-item-action list-group-item-light image-vibrate">
                        <i class="@item.Icon mr-2"></i>
                        @item.Name
                    </a>
                }
            </div>
        </cache>
    </card-body>
</card>

@foreach(模型菜单中的变量项)
{
@项目名称
}

所以我试着在数据库中编辑,但它不会更新,因为它被缓存了。但当我调试时,它仍然运行页面处理程序?这是故意的还是我遗漏了什么?我记得当我在MVC上使用ResponseCache时,它从未重复过这个动作

,对我来说,这似乎是合乎逻辑的。我认为每次从服务器获取页面时都会调用
OnGet()
,并且该方法中的所有代码都会执行。服务器不知道菜单数据将仅用于缓存中已存在的电子页面的一部分。我不太熟悉PageHandler,但您需要以某种方式延迟加载菜单对象。可能会中断菜单渲染并加载到可缓存输出的局部视图中。关于部分视图的更多信息:一个可能更快的解决方案是在页面处理程序中使用MemoryCache并缓存从数据库中获取的数据。这当然不会缓存输出,但实现起来可能会简单一些。MemoryCache:@mortb我以前使用过MemoryCache,但我试图避免使用它,因为它可能很难维护