【问题标题】:Setting a startup page in Blazor在 Blazor 中设置启动页面
【发布时间】:2019-11-14 12:40:26
【问题描述】:

我的 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 是“实验性的”。感觉就像我正在努力改变这么简单的事情。

【问题讨论】:

    标签: routing razor-pages blazor


    【解决方案1】:

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

    @page "/"
    @page "/fetchdata"
    

    【讨论】:

      【解决方案2】:

      复制包含路由模板的@page 指令:

      @page "/"
      

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

      @page "/index"
      

      【讨论】:

        【解决方案3】:

        您不需要在启动时配置路由。路由只适用于每个剃须刀页面。您在@page 上放置的内容是该剃须刀页面的路由路径,例如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..
        }
        

        【讨论】:

          【解决方案4】:

          这就是我们最终做的事情(无论好坏)... 我们通过大量测试发现,cshtml 文件中的以下代码行导致了一个错误:

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

          删除此行后,我们通过更改修复了另一个错误: 这=

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

          到这=

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

          所以,这似乎是一个范围界定问题,尽管我无法清楚地理解为什么。当我将@using 指令添加到页面顶部时,代码似乎没有“听”该指令。我希望@using CWBlah.Shared.Models 将允许我只使用客户端而不是确定整个变量的范围。 我们最终没有进行重定向,而是将所有“仪表板”逻辑放入“Index.cshtml”中。

          【讨论】:

            猜你喜欢
            • 2020-03-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-09-28
            • 1970-01-01
            • 1970-01-01
            • 2019-08-08
            • 1970-01-01
            相关资源
            最近更新 更多