【问题标题】:Bound variable not displaying new value in UI绑定变量未在 UI 中显示新值
【发布时间】:2020-07-13 05:46:05
【问题描述】:

我的页面中有这段代码:

@if (players == null)
{
    <p><em>Loading...</em></p>
}
else
{
    <p>Number of Players: @players.Count</p>
    <p>Number of Teams: @teamsCount</p>
    <p>Excess Players: @excessPlayers</p>
}
@code {
    private List<PlayerModel> players;
    private int teamsCount { get; set; }
    private int excessPlayers { get; set; }

    protected override async Task OnInitializedAsync()
    {
        players = await _db.GetPlayers();

        int teamsCount = players.Count / 5;
        int excessPlayers = players.Count % 5;
    }

加载的html会正确显示一段时间,然后players.Count会正确更新并显示41,但teamsCountexcessPlayers总是显示0。

我已尝试在OnInitializedAsync() 末尾调用StateHasChanged()

我还尝试在单独的方法中设置teamsCountexcessPlayers 并调用StateHasChanged(),但这些都不起作用。 teamsCountexcessPlayers 仍然显示为 0,尽管我可以看到在代码中它们分别是 8 和 1,这是正确的。

我做错了什么?

【问题讨论】:

  • &lt;p&gt;Number of Teams: @(players.Count / 5)&lt;/p&gt; 怎么样?
  • 这确实有效,它将按预期显示 8。但是,我想了解为什么在代码中设置变量并没有像我期望的那样反映在 UI 中(实际上,似乎在其他地方也可以使用)。

标签: c# blazor blazor-server-side


【解决方案1】:

您正在 OnInitializedAsync 方法中为 teamsCountexcessPlayers 创建新的局部变量:

protected override async Task OnInitializedAsync()
{
    players = await _db.GetPlayers();

    int teamsCount = players.Count / 5;
    int excessPlayers = players.Count % 5;
}

您应该改为设置属性的值:

protected override async Task OnInitializedAsync()
{
    players = await _db.GetPlayers();

    teamsCount = players.Count / 5;
    excessPlayers = players.Count % 5;
}

【讨论】:

  • 哇哦。我是一个白痴!我不敢相信我没有发现这一点。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-04
  • 2016-04-03
  • 1970-01-01
  • 2010-12-24
  • 2017-04-13
  • 1970-01-01
  • 2014-04-23
相关资源
最近更新 更多