如何解决Blazor @page 路由 url 用变量定义
我想 @page
使用变量或属性定义路由 url。
@page "/route-url"
<h1>Page Test</h1>
@code {
}
但我想使用如下方法
@page MenuItem.Role
<h1>Page Test</h1>
@code {
}
我尝试了上面的方法然后抛出了异常。就像下面的异常。
C:\Projects\TestBlazorProject\Pages\TestPage.razor(1,7): error RZ1016: The 'page' directive expects a string surrounded by double quotes. [C:\Projects\TestBlazorProject\TestBlazorProject.csproj]
如何使用任何不同的变量或任何类属性定义 @page
路由 url?
解决方法
targetObject
不是 C#,而是 Razor 谈话。 Razor 文件在编译时被预编译成 c# 文件。
例如,这是 Index.razor (Index.razor.g.cs) 的 C# 预编译文件的重要部分:
@page
请注意,[Microsoft.AspNetCore.Components.RouteAttribute("/")]
public partial class Index : Microsoft.AspNetCore.Components.ComponentBase
{
#pragma warning disable 1998
protected override void BuildRenderTree(Microsoft.AspNetCore.Components.Rendering.RenderTreeBuilder __builder)
{
__builder.AddMarkupContent(0,"<h1>Hello,world!</h1>\r\n\r\nWelcome to your new app.\r\n\r\n");
__builder.OpenComponent<Blazor.Starter.Shared.SurveyPrompt>(1);
__builder.AddAttribute(2,"Title","How is Blazor working for you?");
__builder.CloseComponent();
}
#pragma warning restore 1998
}
已成为编译时属性 @page
。它在编译时固定,您不能在运行时更改它。
以这种方式设置路由是因为路由器构建了一个路由映射 - 本质上是一个路由 url/组件类对的字典 - 当应用程序通过为具有 [Microsoft.AspNetCore.Components.RouteAttribute("/")]
属性的任何组件类拖网应用程序集加载时。在路由事件中,它读取新的 url,找到组件类并将其加载到布局中。任何变量(大括号中的内容)都作为 Route
传递到组件中。
你还没有说清楚下面这行应该做什么:
Parameters
- 是否要将路由中提供的变量捕获到
@page MenuItem.Role
中? - 是否要将此页面的路由设置为
MenuItem.Role
中的值?
如果为 1,则其他答案对您都适用。如果是 2,则需要考虑编写自己的路由器。一个超越简单答案的主题。
,我认为您可以通过以下方式实现。
@page "/{Role}"
@code{
[Parameter]
public string Role { get; set; }
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。