Razor 页面:如何在呈现网页之前等待页面模型加载信息

Razor pages: How to wait for page´s model to load the info before presenting the web page

我需要解决一个小问题。我正在构建一个网站,特别是一个页面(Razor 页面项目)我们称之为“Results.cshtml”需要等待其页面模型(Results.cshtml.cs)从 SQL 服务器在打印之前。因此页面模型将在其“OnGet()”方法中执行所有查询。

问题是网页在页面模型接收到数据之前加载,我一直收到对象空引用异常(因为数据还不存在)。

如果我将 @Thread.Sleep(2000) 添加到网页,那么它呈现得很好,因为它给了 SQL 发送信息的时间。所以很明显,解决方案是找到一种方法,让页面等待模型收集数据。但是我没找到。

ModelPage 的 OnGet 方法:


public void OnGet()
        {
            GetPage();
        }
private async void GetPage()
        {
            Task<string> message = _pagesService.GetPagesByAuthorIDAsync("user01");

            var options = new System.Text.Json.JsonSerializerOptions { PropertyNameCaseInsensitive = true };
            Pages = System.Text.Json.JsonSerializer.Deserialize< List<WebPage> >(await message, options);
        }

我需要 属性: "Pages" 在打印页面之前接收到数据。

页面如下所示:


@page
@model MyPageModel
@using System.Threading;

@{
    //Thread.Sleep(2000);
}


<div> @Model.Pages[0].Name </div>

非常感谢!

PD:出于某种奇怪的原因,它不允许我添加“大家好!”一开始。奇怪,所以这里是“大家好!!”

您需要 await async 方法,最好是 return Task,而不是 void:

public async Task OnGetAsync()
{
    await GetPage();
}
private async Task GetPage()
{
    Task<string> message = _pagesService.GetPagesByAuthorIDAsync("user01");

    var options = new System.Text.Json.JsonSerializerOptions { PropertyNameCaseInsensitive = true };
    Pages = System.Text.Json.JsonSerializer.Deserialize< List<WebPage> >(await message, options);
}