整个页面的OnChange事件:Blazor

3

如果用户想离开页面但没有保存blazor中的更改,我希望您能提供警报。

如何高效地检测更改(不想检查数据库)?

在blazor中,@bind值会自动更新。我猜已经有一个服务检查了是否有更改。

我怎样才能得到这个信息呢?


大多数情况下,页面只会在关闭可能有未保存数据的页面时向您显示警告,实际上没有任何检查。只是在 window.onclose 上添加了一个事件监听器和一个 confirm() - Pablo Recalde
是的,但有些人一天会打开页面100次。我不想每次都问他们:D - psclp
也许你可以在模型上设置一个标志modified,并在更改时更新它,然后在保存时重置它,并在关闭时检查其值。 - Pablo Recalde
我在OnInitializedAsync()中加载模型一次,下一次调用是如果用户想要保存。所以我认为它不适用于我的结构,但我认为在开始时序列化对象,如果用户想要更改页面,则可以采取这种方法。谢谢你的回答! - psclp
1个回答

4
您可以使用来自EditContextIsModified():
@if (_editContext.IsModified())
{
    <p>You have made changes. Any unsaved changes will be lost!</p>
}

<EditForm EditContext="_editContext" OnValidSubmit="OnValidSumit">
    <DataAnnotationsValidator />
    <ValidationSummary />
    <InputText @bind-Value="Model.Something" />
    <button type="submit">Add</button>
</EditForm>


@code {
    public Model Model { get; set; } = new Model();

    private EditContext _editContext;

    protected override void OnInitialized()
    {
        _editContext = new EditContext(Model);
    }
}

想要检查用户是否要导航到另一页,请查看以下优秀文章:https://chrissainty.com/an-in-depth-look-at-routing-in-blazor/https://blazor-university.com/routing/detecting-navigation-events/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接