我有一个非常简单的页面:
@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/0
,somepage/1
等。
但是,当我执行该应用程序时,出现“抱歉,此地址没有任何内容”。
我想念什么?
答案 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
中。