英文:
Routing in Blazor does not work, parameter passed is always null
问题
以下是翻译的内容:
我有一个看起来像这样的简单的Razor组件
@page "/einsatz"
@page "/einsatz/{ScaledTable}"
@code {
[Parameter]
public string ScaledTable { get; set; }
private string Test { get; set; }
protected override async Task OnInitializedAsync()
{
Test = ScaledTable; // ScaledTable在这里为NULL
}
protected override async Task OnParametersSetAsync()
{
Table = ScaledTable; // ScaledTable在这里为NULL
}
}
我尝试使用以下URL调用组件
https://localhost:60711/einsatz
=> `ScaledTable` 如预期地为null
https://localhost:60711/einsatz/test
=> 异常
> 未能加载资源:服务器以状态码404响应 () all.css:1
> 未能加载资源:服务器以状态码404响应 () site.css:1
> 未能加载资源:服务器以状态码404响应 () blazor.server.js:1
> ...等等
>
> 未能加载资源:服务器以状态码404响应 ()
> telerik-blazor.js:1
https://localhost:60711/einsatz?scaledtable=test
=> 这里`ScaledTable`也为NULL - 为什么!?
如果我尝试以下页面指令:
@page "/einsatz"
@page "/einsatz/{ScaledTable:string}"
我在应用程序启动时会收到异常
> System.NullReferenceException:对象引用未设置为对象的实例。
>
> 在Microsoft.AspNetCore.Components.Routing.Router.Refresh(Boolean isNavigationIntercepted)
> 在Microsoft.AspNetCore.Components.Routing.Router.SetParametersAsync(ParameterView parameters)
我在这里做错了什么?我在这里有什么误解?
**编辑** 2023年2月26日/18:03
首先,对于
@page "/einsatz/{ScaledTable:string}"
的错误是设计上的,因为您不必为参数指定字符串类型。
进一步研究异常,使用
@page "/einsatz/{ScaledTable}"
我发现这些错误来自于布局中生成的错误路由。尝试加载
localhost:60711/einsatz/_framework/blazor.server.js
失败,HTTP 404错误,因为在此URL中不应该有"einsatz",似乎有些地方出现了问题...
英文:
I have a simple razor component looking like this
@page "/einsatz"
@page "/einsatz/{ScaledTable}"
@code {
[Parameter]
public string ScaledTable { get; set; }
private string Test { get; set; }
protected override async Task OnInitializedAsync()
{
Test = ScaledTable; // ScaledTable is NULL here
}
protected override async Task OnParametersSetAsync()
{
Table = ScaledTable; // ScaledTable is NULL here
}
}
I try to call the component with the following URLs
https://localhost:60711/einsatz
=> ScaledTable
is null as expected
https://localhost:60711/einsatz/test
=> Exception
> Failed to load resource: the server responded with a status of 404 () all.css:1
> Failed to load resource: the server responded with a status of 404 () site.css:1
> Failed to load resource: the server responded with a status of 404 () blazor.server.js:1
> ... and so on
>
> Failed to load resource: the server responded with a status of 404 ()
> telerik-blazor.js:1
https://localhost:60711/einsatz?scaledtable=test
=> ScaledTable
is NULL here also - why!?
If I try this page directives instead:
@page "/einsatz"
@page "/einsatz/{ScaledTable:string}"
I get an exception at startup of the app
> System.NullReferenceException: Object reference not set to an instance of an object.
>
> at Microsoft.AspNetCore.Components.Routing.Router.Refresh(Boolean isNavigationIntercepted)
> at Microsoft.AspNetCore.Components.Routing.Router.SetParametersAsync(ParameterView parameters)
What am I doing wrong here? What I am misunderstanding here?
Edited 26.02.2023/18:03
First of all, the error for
@page "/einsatz/{ScaledTable:string}"
is by design, since you have not to specify string type for parameter.
Looking further into the exception, using
@page "/einsatz/{ScaledTable}"
I found out, that these errors come from wrong routes, generated for the files in the layout. The try to load
localhost:60711/einsatz/_framework/blazor.server.js
fails with HTTP 404 of cause, because there should be no "einsatz" in this URL, something seems to be wrong here anywhere ...
答案1
得分: 0
最后我找到了我犯的错误。
我需要在 _layout.cshtml 文件中添加以下行:
<head>
<base href="~/" />
....
不知道我是在哪里丢失了这个,它是任何新的 Blazor 项目的一部分。
英文:
Finally I found the error I made.
I have to add the following line to the _layout.cshtml file:
<head>
<base href="~/" />
....
Don't know where I have lost this, it is part of any new Blazor project.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论