我可以阻止 Blazor 中的导航吗?

问题描述 投票:0回答:3

在 Blazor 服务器端应用程序中,是否涉及一些执行实际导航的 javascript,例如当用户点击链接时? 我的意思是类似

window.history.pushState(..)

理论上是否可以覆盖该 javascript 以防止在某些情况下(当页面上有未保存的更改等)导航?

navigation blazor single-page-application blazor-server-side
3个回答
5
投票

从 .NET 7 开始,Microsoft.AspNetCore.Components.Routing 命名空间中就有了一个 NavigationLock。 (https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.components.routing.navigationlock?view=aspnetcore-7.0)

该组件将使您能够对内部路由事件(到路由组件)和外部事件(例如,有人在地址栏中输入 www.google.com)做出反应。

更多信息和示例在这里: https://learn.microsoft.com/en-us/aspnet/core/blazor/fundamentals/routing?view=aspnetcore-7.0


0
投票

没有内置任何东西。 您可以在窗口上使用 onbeforeunload,但这完全取决于您(或 nuget 库)来编写代码,而且现在它不可配置,因此您只会得到标准提示。

在我看来,当有未保存的数据时,不渲染任何导航链接会更容易 - 当然,除了留下取消编辑的方法。


-1
投票

此答案不再是最新的。 请参阅此问题和答案以获取最新版本。

注意:链接不再有效。

正如 Magoo 先生上面所说,没有开箱即用的解决方案。

我开发了一套控件,现在用它们来做我认为您想要的事情。 我的个人 GutHub 网站上有三篇文章、一个可以获取代码的存储库以及一个演示 Azure 网站。 欢迎您使用存储库上的代码。

您可以在此处查看正在运行的解决方案:https://cec-blazor-database.azurewebsites.net//inlinedialogeditor

参见:

  1. 编辑状态控件来管理表单的状态,即干净或脏

  2. 验证状态控制来管理验证。 您可以使用符合标准 Blazor Form 原则的任何验证 - 我刚刚将其包含在此处,因为它在演示中使用。

  3. 内联对话框可锁定不在编辑表单中的所有链接/按钮

您还可以使用模态对话框来托管您的编辑表单 - 这里有一篇相关文章:

模态编辑器 - 请注意,本文将在未来几天内更新。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.