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);
}
我需要解决一个小问题。我正在构建一个网站,特别是一个页面(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);
}