Blazor:带有参数的路由无法解析

时间:2020-05-15 06:43:39

标签: blazor blazor-server-side

我有一个非常简单的页面:

@page "/somepage/{id}"

@namespace My.BlazorApp.Pages

<h1>This would be page @Id</h1>

@code {

    [Parameter]
    public long Id { get; set; }
}

我的NavMenu.razor中包含以下代码:

@foreach(var sp in ViewModel.SubPageLinks) {
    <li class="nav-item px-3">
        <NavLink class="nav-link" href="@sp.Path">
            <span class="oi oi-plus" aria-hidden="true"></span> @sp.Title
        </NavLink>
    </li>
}

@sp.Path生成somepage/0somepage/1等。

但是,当我执行该应用程序时,出现“抱歉,此地址没有任何内容”。

我想念什么?

2 个答案:

答案 0 :(得分:1)

您必须在route参数中指定:long

@page "/somepage/{id:long}"

https://docs.microsoft.com/en-us/aspnet/core/blazor/routing?view=aspnetcore-3.1#route-constraints

答案 1 :(得分:0)

我找到了解决方案。它与.csproj文件有关。

在网上搜索后发现this issue on Github,因此我举了一个非常简单的示例来重现它,以重新开始该问题。我刚刚创建了基本的Blazor应用示例,并添加了一个非常简单的页面,仅显示“ Foo”。

当我运行它时,我也得到了“很抱歉,这个地址什么也没有。”

然后我进入.csproj,发现了以下内容:

  <ItemGroup>
    <Content Remove="Pages\SomeOtherPage.razor" />
  </ItemGroup>

  <ItemGroup>
    <None Include="Pages\SomeOtherPage.razor" />
  </ItemGroup>

当我删除它时,它开始起作用。另外,正如@inktkiller指出的那样,我忘记添加:long类型定义,该定义首先导致在打开页面时引发异常。

解释是:我将Razor页面创建为文本文件,然后对其进行重命名,因为当我使用Razor页面向导时,Visual Studio仍会生成旧的cshtml文件。文本文件以这种奇怪的方式添加到csproj中。