【发布时间】:2021-10-13 18:20:24
【问题描述】:
我需要解决一个小问题。我正在构建一个网站,特别是一个页面(Razor pages 项目)让我们称之为“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:出于某种奇怪的原因,它不允许我添加“大家好!”一开始。很奇怪,所以这里是“大家好!!”
【问题讨论】:
-
这很不寻常。但是没有看到涉及的代码很难帮助你。
-
我清理并添加了代码!
-
您没有在等待数据。肯定在 async void 内,但是调用了
OnGet方法,并且在private async void GetPage()完成之前完成。 -
据我所知,您可以只使用
OnGet异步:public async Task OnGet()而不要使用async void。
标签: c# asp.net .net-core razor-pages