在 Razor 页面中访问 Async 属性
Accessing Async Property in Razor page
我正在尝试使用 Razor 页面创建一个简单的 .NET Core 2.0 Web 应用程序。该页面连接到同样简单的 Core 2.0 Web API。我有一个简单的 class:
public class About : PageModel
{
private ServiceProxy serviceProxy;
public About(ServiceProxy serviceProxy)
{
this.serviceProxy = serviceProxy;
}
public IEnumerable<ProductViewModel> Values { get; set; }
public async void OnGetAsync()
{
this.Values = await this.serviceProxy.GetValuesAsync();
}
}
而且页面也很简单:
@page
@model About
@{
ViewData["Title"] = "About";
}
<h2>@ViewData["Title"]</h2>
<h3>@Model.Message</h3>
@foreach (var product in @Model.Values)
{
<p>@product.Name</p>
}
但是,页面显示在 OnGetAsync()
方法可以填充 'Values' 列表之前。这似乎是一个常见的操作,但我找不到任何关于它的讨论(我也试过迭代异步 'GetValues()' 方法)。
CSHTML 页面应该如何与 API 可能需要几秒钟才能获得 return 结果的 Web 交互?
那是因为async void
,这基本上是一劳永逸,应该避免。页面将在函数有时间完成之前加载,因为它们将并行执行。
将签名更改为 async Task
以便页面可以等待操作完成。
public async Task<IActionResult> OnGetAsync() {
this.Values = await this.serviceProxy.GetValuesAsync();
return Page();
}
我正在尝试使用 Razor 页面创建一个简单的 .NET Core 2.0 Web 应用程序。该页面连接到同样简单的 Core 2.0 Web API。我有一个简单的 class:
public class About : PageModel
{
private ServiceProxy serviceProxy;
public About(ServiceProxy serviceProxy)
{
this.serviceProxy = serviceProxy;
}
public IEnumerable<ProductViewModel> Values { get; set; }
public async void OnGetAsync()
{
this.Values = await this.serviceProxy.GetValuesAsync();
}
}
而且页面也很简单:
@page
@model About
@{
ViewData["Title"] = "About";
}
<h2>@ViewData["Title"]</h2>
<h3>@Model.Message</h3>
@foreach (var product in @Model.Values)
{
<p>@product.Name</p>
}
但是,页面显示在 OnGetAsync()
方法可以填充 'Values' 列表之前。这似乎是一个常见的操作,但我找不到任何关于它的讨论(我也试过迭代异步 'GetValues()' 方法)。
CSHTML 页面应该如何与 API 可能需要几秒钟才能获得 return 结果的 Web 交互?
那是因为async void
,这基本上是一劳永逸,应该避免。页面将在函数有时间完成之前加载,因为它们将并行执行。
将签名更改为 async Task
以便页面可以等待操作完成。
public async Task<IActionResult> OnGetAsync() {
this.Values = await this.serviceProxy.GetValuesAsync();
return Page();
}