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

Razor页面异步数据加载问题:页面先渲染导致数据未显示

解决Razor页面提前渲染、API数据无法显示的问题

嘿,我一眼就发现问题所在啦——你的OnGetAsync方法用了async void返回类型,这正是页面没等API数据加载完就提前渲染的核心原因!

问题根源

在ASP.NET Core Razor Pages中,异步的页面处理方法必须返回Task类型。如果用async void,ASP.NET Core框架没办法追踪这个异步操作的完成状态,会直接跳过等待步骤,继续执行页面渲染逻辑。这时候你的Values列表还没被API返回的数据填充,页面自然显示不出内容。

修正后的PageModel代码

只需要把OnGetAsync的返回类型从async void改成async Task就行,其他逻辑完全不用动:

public class About : PageModel 
{ 
    private ServiceProxy serviceProxy; 

    public About(ServiceProxy serviceProxy) 
    { 
        this.serviceProxy = serviceProxy; 
    } 

    public IEnumerable<ProductViewModel> Values { get; set; } 

    // 把async void改成async Task
    public async Task OnGetAsync() 
    { 
        this.Values = await this.serviceProxy.GetValuesAsync(); 
    } 
}

额外优化:添加加载状态(可选)

如果你的API响应确实很慢,为了提升用户体验,可以在Razor页面里加个加载提示,等数据加载完成后再显示内容:

@page
@model About
@{
    ViewData["Title"] = "About";
}

<h2>@ViewData["Title"]</h2>
<h3>@Model.Message</h3>

@if (Model.Values == null)
{
    <p>正在加载产品数据...</p>
}
else
{
    @foreach (var product in Model.Values)
    {
        <p>@product.Name</p>
    }
}

这样修改后,框架会等待OnGetAsync里的API调用完成,再渲染页面,你的产品数据就能正常显示啦!

内容的提问来源于stack exchange,提问作者user365462

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:26:28