.Net 5 blazor服务器应用程序属性在razor中为null,但在webapi调用后具有数据

.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

我正在编写一个.Net 5 Blazor服务器端应用程序,如果我使用了错误的术语,很抱歉,我似乎无法确定razor页面的对象/属性为null的原因,但是填充该对象/属性的代码隐藏方法包含来自webApi的数据。我正在尝试使用存储库模式、dto对象、依赖项注入、webapi和efcore

在Startup.cs>ConfigureServices()中,我有:


我怀疑我忽略了一些简单的东西。

如果我读对了,你是说如果你把
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=someIdCode
var 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);