C# Blazor元素在第一次加载时不会更新

C# Blazor元素在第一次加载时不会更新,c#,.net-core,blazor-server-side,C#,.net Core,Blazor Server Side,我在服务器端blazor中有一部分页面在第一次加载时不会更新。重新加载页面后,页面将更新,不会出现任何问题,并按预期操作。任何指导都将不胜感激 第一次有人按下“打开”或“关闭”按钮时,它会成功运行代码,但不会更新UI,因此如果再次按下,它会抛出错误。但是,正如我前面所说的,如果只是刷新同一页面,那么我可以单击打开/关闭我的核心内容,它会更新UI,并允许正确翻转开关 <div class="row row-padding mt-5 d-flex justify-content-be

我在服务器端blazor中有一部分页面在第一次加载时不会更新。重新加载页面后,页面将更新,不会出现任何问题,并按预期操作。任何指导都将不胜感激

第一次有人按下“打开”或“关闭”按钮时,它会成功运行代码,但不会更新UI,因此如果再次按下,它会抛出错误。但是,正如我前面所说的,如果只是刷新同一页面,那么我可以单击打开/关闭我的核心内容,它会更新UI,并允许正确翻转开关

<div class="row row-padding mt-5 d-flex justify-content-between">
    <h5 class="secondary-font">Month End</h5>
    </div>
    <hr />
    <div class="row row-padding">
        <table class="table table-striped">
            <thead>
                <tr>
                    <th>Month</th>
                    <th>Status</th>
                    <th></th>
                </tr>
            </thead>
            <tbody>
                @foreach(var date in OpenMonths)
                {
                    <tr>
                        <td class="align-middle">@date.ToString("MMMM, yyyy")</td>
                        @if (PropertyMonthCloseds.Exists(p => p.Month == date && !p.IsOpen)) 
                        {
                            <td class="align-middle">Closed</td>
                            <td class="align-middle">
                                <button type="button" class="btn btn-link accent-font" @onclick="@(async () => await OpenCloseMonth(date))">Open</button>
                            </td>
                        }
                        else
                        {
                            <td class="align-middle">Open</td>
                            <td class="align-middle">
                                <button type="button" class="btn btn-link accent-font" @onclick="@(async () => await OpenCloseMonth(date))">Close</button>
                            </td>
                        }
                    </tr>
                }
            </tbody>
        </table>
    </div>

请将StateHasChanged()方法添加到OpenCloseMonth()函数的末尾。这将立即刷新UI。

尝试在OpenCloseMonth()方法末尾添加方法调用StateHasChanged()。当然是上帝。我是个白痴请将此作为答案添加到,我将标记它。
private async Task OpenCloseMonth(DateTime date)
    {
        try
        {
            if (PropertyMonthCloseds.Exists(p => p.Month == date))
            {
                var prop = PropertyMonthCloseds.FirstOrDefault(p => p.Month == date);
                prop.IsOpen = !prop.IsOpen;
                await Repo.UpdatePropertyMonthClosed(prop);
                Toast.ShowSuccess("Month End change saved.");
            }
            else
            {
                var now = DateTime.UtcNow;
                var newProp = new PropertyMonthClosed
                {
                    Month = date,
                    CreatedBy = User.UserId,
                    ModifiedBy = User.UserId,
                    CreatedOn = now,
                    ModifiedOn = now,
                    PropertyId = PropId
                };

                await Repo.CreatePropertyMonthClosed(newProp);
                Toast.ShowSuccess("Month Closed.");
            }
            await ProcessOpenMonths();
        }
        catch(Exception ex)
        {
            ShowInnerException(ex);
        }
    }
    private async Task ProcessOpenMonths()
    {
        var subs = await Repo.GetSubmissions(PropId);
        OpenMonths = subs.GroupBy(x => new { Month = x.SubmissionDate.Month, Year = x.SubmissionDate.Year })
            .OrderByDescending(o => o.Key.Year).ThenByDescending(t => t.Key.Month)
            .Select(s => new DateTime(s.Key.Year, s.Key.Month, 1))
            .ToList();
    }