Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
onOnAfterRenderAsync之后未更新Blazor UI_Blazor_Blazor Server Side - Fatal编程技术网

onOnAfterRenderAsync之后未更新Blazor UI

onOnAfterRenderAsync之后未更新Blazor UI,blazor,blazor-server-side,Blazor,Blazor Server Side,我有一个Blazor服务器端页面,当用户转到该页面时需要加载数据。但是,在执行OnAfterRenderAsync后,它不会更新UI。数据加载正确,如果我创建了一个“刷新”按钮来标记页面,它就会工作 我有点像: @page "/mypage <button class="btn btn-primary" @onclick="Temp">Refresh</button> @if (_loading) { <

我有一个Blazor服务器端页面,当用户转到该页面时需要加载数据。但是,在执行OnAfterRenderAsync后,它不会更新UI。数据加载正确,如果我创建了一个“刷新”按钮来标记页面,它就会工作

我有点像:

@page "/mypage

<button class="btn btn-primary" @onclick="Temp">Refresh</button>

@if (_loading)
{
    <p>
        <em>Loading...</em>
    </p>
}
else
{
    <p>
        <em>Here is your data</em>
    </p>
}

@code {
    private bool _loading { get; set; }
    
    protected override async Task OnInitializedAsync()
    {
        _loading = true;

    }

    protected override async Task OnAfterRenderAsync(bool firstRender)
    {
        if (!firstRender) return;
        //Amazong loading code
        _loading = false;
    }

    private void Temp()
    {
        _loading = false;
    }

}
@page”/mypage
刷新
@如果(_加载)
{

加载。。。

} 其他的 { 这是你的数据

} @代码{ 私有bool_加载{get;set;} 受保护的重写异步任务OnInitializedAsync() { _加载=真; } AfterRenderAsync(bool firstRender)上受保护的重写异步任务 { 如果(!firstRender)返回; //亚马逊装载代码 _加载=假; } 私有void Temp() { _加载=假; } }
在AfterRenderAsync上单步执行
显示
\u loading
正确设置为false。在
Temp()
中单步执行显示
\u loading
设置为false


我猜在RenderAsync
之后,
不会更新DOM,事实上,单击按钮会强制更新DOM。

首先,您应该加载OnInitialized(异步)对中的数据。 如果将代码放置在OnAfterRender(异步)对中,这会更改组件的状态,例如:
\u loading=false;
,则应手动调用StateHasChanged方法,该方法通知组件其状态已更改,并应重新呈现

and if I create a "refresh" button to flag the page it works.

它重新呈现并不是因为您“标记页面”…在Blazor中,UI事件(如单击事件)会自动调用StateHasChanged方法。当Blazor处于开发的第一阶段时,我们必须手动调用StateHasChanged方法。

首先,您应该在初始化(异步)对中加载数据。 如果将代码放置在OnAfterRender(异步)对中,这会更改组件的状态,例如:
\u loading=false;
,则应手动调用StateHasChanged方法,该方法通知组件其状态已更改,并应重新呈现

and if I create a "refresh" button to flag the page it works.

它重新呈现并不是因为您“标记页面”…在Blazor中,UI事件(如单击事件)会自动调用StateHasChanged方法。当Blazor处于开发的第一阶段时,我们必须手动调用StateHasChanged方法。

我的方法是使用初始化事件

例如,如果正在加载类别列表,则可以在razor标记中应用以下测试条件:

@if (categories == null && _loadFailed)
{
    <h1 class="text-danger">The data has failed to load please try again in a little bit..</h1>
}
else if (categories == null)
{
    <h1 class="text-success">Loading...</h1>
    <div style="display:normal;margin:auto" class="loader"></div>
}
else if (categories.Count == 0)
{
    <text>No categories found</text>
}
else...
@if(categories==null&&u加载失败)
{
数据加载失败,请稍后再试。。
}
else if(categories==null)
{
加载。。。
}
else if(categories.Count==0)
{
找不到类别
}
其他的

我的方法是使用初始化事件

例如,如果正在加载类别列表,则可以在razor标记中应用以下测试条件:

@if (categories == null && _loadFailed)
{
    <h1 class="text-danger">The data has failed to load please try again in a little bit..</h1>
}
else if (categories == null)
{
    <h1 class="text-success">Loading...</h1>
    <div style="display:normal;margin:auto" class="loader"></div>
}
else if (categories.Count == 0)
{
    <text>No categories found</text>
}
else...
@if(categories==null&&u加载失败)
{
数据加载失败,请稍后再试。。
}
else if(categories==null)
{
加载。。。
}
else if(categories.Count==0)
{
找不到类别
}
其他的

我遇到的问题是将加载置于OnInitialized,导致页面未加载我遇到的问题是将加载置于OnInitialized,导致页面未加载