在 Blazor 服务器端应用程序中,是否涉及一些执行实际导航的 javascript,例如当用户点击链接时? 我的意思是类似
window.history.pushState(..)
。
理论上是否可以覆盖该 javascript 以防止在某些情况下(当页面上有未保存的更改等)导航?
从 .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
没有内置任何东西。 您可以在窗口上使用 onbeforeunload,但这完全取决于您(或 nuget 库)来编写代码,而且现在它不可配置,因此您只会得到标准提示。
在我看来,当有未保存的数据时,不渲染任何导航链接会更容易 - 当然,除了留下取消编辑的方法。
此答案不再是最新的。 请参阅此问题和答案以获取最新版本。
注意:链接不再有效。
正如 Magoo 先生上面所说,没有开箱即用的解决方案。
我开发了一套控件,现在用它们来做我认为您想要的事情。 我的个人 GutHub 网站上有三篇文章、一个可以获取代码的存储库以及一个演示 Azure 网站。 欢迎您使用存储库上的代码。
您可以在此处查看正在运行的解决方案:https://cec-blazor-database.azurewebsites.net//inlinedialogeditor。
参见:
验证状态控制来管理验证。 您可以使用符合标准 Blazor Form 原则的任何验证 - 我刚刚将其包含在此处,因为它在演示中使用。
内联对话框可锁定不在编辑表单中的所有链接/按钮。
模态编辑器 - 请注意,本文将在未来几天内更新。