不完全是您正在寻找的东西,但仍然是“解决方案”。我目前似乎无法找到一种方法,在服务器端执行类似于 Response.Redirect 的操作,但使用 jsinterop,在您希望能够重定向 FROM 的组件中,使用类似这样的东西。请注意,我也很好奇,并且知道这也会为我自己提出,我做了以下事情:
因此,基于带有服务器端项目模板的示例应用程序......
索引.cshtml
@using Microsoft.JSInterop;
<a href="#" class="btn btn-primary" onclick="@GoSomewhere">Go somewhere with Blazor</a>
@functions {
protected void GoSomewhere()
{
RedirectTo("/FetchData"); //or any other "page" in your pages folder
}
public static Task<string> RedirectTo(string path)
{
return JSRuntime.Current.InvokeAsync<string>(
"clientJsfunctions.RedirectTo", path);
}
}
然后,在 wwwwroot 文件夹下,放置一个 javascript 文件:
window.clientJsfunctions = {
RedirectTo: function (path) {
window.location = path;
}
};
最后,在您的引导程序文件 index.html 中,放置对此 js 文件的引用
<body>
<app>Loading...</app>
<script src="_framework/blazor.server.js"></script>
<script src="scripts/ClientUtil.js"></script>
</body>
更好的是,将上面“RedirectTo”之类的方法放在一个单独的类中,并将其用作大多数组件页面的基类。
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Blazor.Components;
using Microsoft.JSInterop;
namespace MyApp.Web.App.Shared
{
public class MycomponentBase : BlazorComponent
{
public static Task<string> RedirectTo(string path)
{
return JSRuntime.Current.InvokeAsync<string>(
"clientJsfunctions.RedirectTo", path);
}
}
}
另外,记得把它放在每个组件的顶部 @inherits MycomponentBase;
现在,您应该有一个“重定向”方法,您可以从派生自您的基组件类的任何组件调用。