C# Blazor元素在第一次加载时不会更新
我在服务器端blazor中有一部分页面在第一次加载时不会更新。重新加载页面后,页面将更新,不会出现任何问题,并按预期操作。任何指导都将不胜感激 第一次有人按下“打开”或“关闭”按钮时,它会成功运行代码,但不会更新UI,因此如果再次按下,它会抛出错误。但是,正如我前面所说的,如果只是刷新同一页面,那么我可以单击打开/关闭我的核心内容,它会更新UI,并允许正确翻转开关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
<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();
}