.Net 5 blazor服务器应用程序属性在razor中为null,但在webapi调用后具有数据
我正在编写一个.Net 5 Blazor服务器端应用程序,如果我使用了错误的术语,很抱歉,我似乎无法确定razor页面的对象/属性为null的原因,但是填充该对象/属性的代码隐藏方法包含来自webApi的数据。我正在尝试使用存储库模式、dto对象、依赖项注入、webapi和efcore 在Startup.cs>ConfigureServices()中,我有:.Net 5 blazor服务器应用程序属性在razor中为null,但在webapi调用后具有数据,razor,blazor-server-side,Razor,Blazor Server Side,我正在编写一个.Net 5 Blazor服务器端应用程序,如果我使用了错误的术语,很抱歉,我似乎无法确定razor页面的对象/属性为null的原因,但是填充该对象/属性的代码隐藏方法包含来自webApi的数据。我正在尝试使用存储库模式、dto对象、依赖项注入、webapi和efcore 在Startup.cs>ConfigureServices()中,我有: 我怀疑我忽略了一些简单的东西。如果我读对了,你是说如果你把SearchDocumentNumbers中的行改成var docs=wait
我怀疑我忽略了一些简单的东西。如果我读对了,你是说如果你把
SearchDocumentNumbers
中的行改成var docs=wait DocumentNumbersDataService.GetDocumentNumbersAsync(ProjNumber)
将返回一组IEnumerable
,但类属性DocumentNumbers
未填充,或者由于未显示任何内容而似乎未填充?是的,我相信您理解我遇到的问题…Home.razor不显示DocumentNumbers中的项目。我将方法更改为protected async Task SearchDocumentNumbers()
,并将对数据服务的调用更改为var DocumentNumbers=wait DocumentNumbersDataService.GetDocumentNumbersAsync(ProjNumber)
和DocumentNumber变量确实获取数据,但在Home.razor中,DocumentNumber为null。不知道为什么,但在Edge Developer Tools中,我看到SearchDocumentNumbers
中的_blazor?id=someIdCodevar DocumentNumbers
的状态101交换协议是一个局部变量。如果在调用SearchDocumentNumbers
时填充了它,则可以将其分配给this.DocumentNumbers
,这是SearchDocumentNumbers
中的类属性。您与任务是异步的
,因此在SearchDocumentNumbers
完成之前不会调用自动状态已更改
。很抱歉有一段时间没有回复…感谢您的反馈。当我单击搜索按钮时,如果按钮为
,则不会显示从webapi成功检索到的文档,即使我将webapi的结果分配给this.documentnumber
,但如果按钮为
,则会工作!所以,是的,有一些进展,但我不明白为什么
没有按照我的编码方式工作-我缺少一些应该将控制权传递回razor页面或类似的东西。
services.AddHttpClient<IDocumentNumbersDataService, DocumentNumbersDataService>
(client => client.BaseAddress = new Uri("https://localhost:44323/"));
@page "/Home"
<form method="get">
<div class="input-group-append">
<button type="submit" class="btn btn-primary" @onclick="SearchDocumentNumbers">Search</button>
</div></form>
@if (DocumentNumbers == null)
{
<p><em>Loading...</em></p>
}
else
{
```
show table of document numbers using foreach()
```
}
public partial class Home
{
public IEnumerable<DocumentNumberDto> DocumentNumbers { get; set; }
[Parameter]
public string ProjNumber { get; set; }
[Inject]
public IDocumentNumbersDataService DocumentNumbersDataService { get; set; }
protected async Task<IEnumerable<DocumentNumberDto>> SearchDocumentNumbers()
{
ProjNumber = "1012100100";
var DocumentNumbers = await DocumentNumbersDataService.GetDocumentNumbersAsync(ProjNumber); //DocumentNumbers gets populated with Dto objects
}
}
public async Task<IEnumerable<DocumentNumberDto>> GetDocumentNumbersAsync(string ProjNumber)
{
return await JsonSerializer.DeserializeAsync<IEnumerable<DocumentNumberDto>>
(await _httpClient.GetStreamAsync($"api/documentnumbers/{ProjNumber}"),
new JsonSerializerOptions() { PropertyNameCaseInsensitive = true });
}
var DocumentNumbers = await DocumentNumbersDataService.GetDocumentNumbersAsync(ProjNumber);