Blazor替代JS window.location.href

时间:2019-11-17 16:38:04

标签: c# blazor blazor-server-side

有人知道是否有Javascript window.location.href()之外的任何替代方法可以在任何情况下替换Blazor服务器端用户地址栏中的URL(单击按钮等)?或者我只需要使用Blazor JavaScript互操作并直接编写JS?

2 个答案:

答案 0 :(得分:4)

更改网址(或导航至其他网址)的简便方法是使用NavigationManager

@inject NavigationManager MyNavigationManager
...
MyNavigationManager.NavigateTo("http://new location")

NavigationManager cheatsheet

了解如何注入导航管理器以及如何使用它。

关于在事件上调用它,这是一个c#问题。只需订阅事件并进行MyNavigationManager.NavigateTo通话。

答案 1 :(得分:1)

  

我可以使用NavigationManager.NavigateTo(“ url”),但会刷新   整个页面,而不仅仅是替换地址栏中的URL

您无法替换地址栏中的网址,而同时将其保留在Blazor中的相同位置。

这是Blazor处理导航的方式:

export function navigateTo(uri: string, forceLoad: boolean) {
  const absoluteUri = toAbsoluteUri(uri);

  if (!forceLoad && isWithinBaseUriSpace(absoluteUri)) {
    // It's an internal URL, so do client-side navigation
    performInternalNavigation(absoluteUri, false);
  } else if (forceLoad && location.href === uri) {
    // Force-loading the same URL you're already on requires special handling to avoid
    // triggering browser-specific behavior issues.
    // For details about what this fixes and why, see https://github.com/aspnet/AspNetCore/pull/10839
    const temporaryUri = uri + '?';
    history.replaceState(null, '', temporaryUri);
    location.replace(uri);
  } else {
    // It's either an external URL, or forceLoad is requested, so do a full page load
    location.href = uri;
  }
} 

您可以使用JSInterop实现此目的,但是您应该小心并了解自己的操作。您可能会弄乱Blazor的导航和历史记录跟踪逻辑。

也许您应该告诉我们您要求的目标,以便我们可以找到合适的解决方案。