在Blazor中设置启动页

36
我的Blazor应用程序的启动页面是Index.cshtml。我想将启动页面更改为主页,也就是我的Home.cshtml。
我正在使用vs2019、ASPNET CORE Blazor(0.9.0-preview3-19154-020)。
Blazor Serverside在Startup.cs中有路由,我认为这是为了服务而不是页面...并且保留了创建新Blazor项目时生成的路由。
app.UseMvc(routes =>
{
   routes.MapRoute(name: "default", template: "{controller}/{action}/{id?}");
});
客户端的创业公司(由新的 Blazor 项目生成)如下:
public void ConfigureServices(IServiceCollection services)
{
}

 public void Configure(IComponentsApplicationBuilder app)
{
     app.AddComponent<App>("app");
}

我需要在客户端的startup.cs中注册路由吗?

index.cshtml文件中只有一行代码:

@page "/"

如何将我的“启动”页面从Index.cshtml更改为Home.cshtml?

我已经在许多地方查找过,也了解到Blazor是“实验性的”。感觉我要花太多精力来改变这么简单的东西。

4个回答

37

将"@page /"放在您想要成为默认页面的页面顶部。从Index.razor中删除"@page /"。

@page "/"
@page "/fetchdata"

这对我来说是一个“噢-傻!”的时刻。 - srHunter

16

复制包括路由模板在内的@page指令:

@page "/"

Index.cshtml文件到Home.cshtml文件,然后删除Index.cshtml文件,或为其@page指令提供不同的路由模板,例如:

@page "/index"

10

您无需在启动时配置路由。路由仅适用于 Razor 页面。无论您在 @page 上放置什么,都是该 Razor 页面的路由路径,例如 Index.razor 路由到根路径“/”。

@page "/"

<h1>Index Page</h1>

@code {
    //Code here..
}

为不同的 Razor 页面使用相同的路由并不是个好主意。如果想在 Home.razor 页面上使用根路径,请确保将 Index.razor 改为其他路由。

如果你想要重定向,比如说,你想让你的网站从 www.yourdomain.com 加载到 www.yourdomain.com/home,那么你可以在 Index.razor 文件中实现以下操作:

@page "/"
@inject NavigationManager NavManager

<h1>Index Page</h1>

@code {
    protected override void OnInitialized()
    {
        NavManager.NavigateTo("/home");
    }
}

这假设你的Home.razor路由器上也有以下路由。
@page "/home"

<h1>Index Page</h1>

@code {
    //Code here..
}

1
如果您想要重定向,我建议将其放在路由器中。没有理由保留一个索引页面只是为了重新路由。您可以覆盖 OnNavigateOnNavigateAsync 并从注入的 NavigationContext.Path 中读取路径。如果路径为空,则知道它是根页面,并且可以重定向到 /home 或其他位置。 - Wes Thompson

0

这是我们最终采取的做法(不管好坏)... 通过多次测试,我们发现cshtml文件中以下代码行导致了一个错误:

@inject Microsoft.AspNetCore.Blazor.Services.WebAssemblyUriHelper UriHelper

删除此行后,我们通过更改以下内容修复了另一个错误: This =

// Create list of clients
List<Clients> clientList = new List<Clients>();

转换为This =

// Create list of clients
List<CWBlah.Shared.Models.Clients> clientList = new `List<CWBlah.Shared.Models.Clients>();`

看起来这是一个作用域问题,尽管我不能清楚地理解为什么。当我在页面顶部添加@using指令时,代码似乎不会“听取”该指令。我希望@using CWBlah.Shared.Models可以让我只使用Clients而不是整个变量的作用域。 最终我们没有进行重定向,而是将所有“Dashboard”逻辑放入“Index.cshtml”中。


你的应用程序中有多个名为'Clients'的对象吗? - niico

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