【发布时间】:2020-08-27 17:20:19
【问题描述】:
我的问题可能很简单,但我一直在反复尝试了解问题所在。我有一个带有单独模型类的 Blazor 页面(在代码中循环时引用为 LsC 的 List<Type> 或 ls 的单),用于加载数据。但是,当我单击以更新该数据时,页面不会刷新。如果我添加一个新条目,该页面会加载新条目。
Blazor 页面代码有问题很简单:
@if (ls.PrimaryContact)
{
<div style="cursor: pointer;" class="badge badge-pill badge-success">Primary</div>
}
else
{
<div style="cursor: pointer;" @onclick="@(() =>MakePrimaryContact(@ls.Id))" class="badge badge-pill badge-info">Make Primary</div>
}
当主要字段中的结果为真时,代码应放置一个绿色药丸,或者放置一个带有制作主要文本的常规信息药丸。手动 (F5) 刷新页面时,代码可以正常工作。但是当我单击 Make Primary 药丸时,数据库会更新,但页面不会。我必须再次手动更新页面以正确反映更改。
它调用onClick的函数:
private void MakePrimaryContact(int LCId)
{
LeadsContactsGateway LCGw = new LeadsContactsGateway();
var wt = LCGw.UpdatePrimary(Lead.Id, LCId);
LsC = LsCGw.GetByLeadsId(Id);
StateHasChanged();
OnInitialized();
}
我添加了StateHasChanged() 作为附加措施,但我的页面没有获取具有正确主要联系人的更新记录集。直到我手动 (F5) 刷新网页时才会反映正确的更新。
奇怪的是,在同一页面上,我还有另一个按钮,用于添加新的数据库条目并自动弹出更新。
没有有问题的新数据库条目的代码:
<button class="btn btn-primary btn-sm" @onclick="() => NewLeadContactModal.Open()">+ New
<i class="icon icon-people-fill icon-white"></i>
</button>
...
<Modal @ref="@NewLeadContactModal">
<Title>Add New Contact for: @Lead.LeadName</Title>
<Body>
<ContactAdd LeadsId="@Lead.Id"></ContactAdd>
</Body>
<Footer>
<button type="button" class="btn btn-secondary" data-dismiss="modal" @onclick="() => ContactModalClickHandler(0)">Close</button>
</Footer>
...
private void ContactModalClickHandler(int completed)
{
if (completed > 0)
{ }
NewLeadContactModal.Close();
OnInitialized();
}
任何建议将不胜感激。
【问题讨论】:
-
永远不要自己调用 OnInitialized,它是一个只有 Blazor 应该调用的生命周期方法。我认为您的问题是您的方法实际上并未更新
ls或Lead -
谢谢@peter。如果我不调用 OnInitialized,就像我在模式插入记录之后所做的那样,页面不会刷新。在模式代码上,我添加了 OnInitialized 以更新记录并显示;然而,当我在这个简单的记录更新上做同样的事情时,页面并没有反映应该在“ls”上发生的变化。
-
@Mariano 如果
OnInitialized做了一些您想在别处重复使用的工作,请将其移至单独的方法并从两者中调用该方法。 @peter 的建议很好 -
@Quango,谢谢。我将尝试只使用一种调用 OnInitialized 的方法。彼得,谢谢,我仍在努力了解 Blazor 是如何协同工作的,我绝不会取消建议的资格。
标签: c# blazor blazor-server-side