微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Blazor @page 路由 url 用变量定义

如何解决Blazor @page 路由 url 用变量定义

我有一个关于 Blazor 服务器端的问题。

我想 @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

  1. 是否要将路由中提供的变量捕获到 @page MenuItem.Role 中?
  2. 是否要将此页面的路由设置为 MenuItem.Role 中的值?

如果为 1,则其他答案对您都适用。如果是 2,则需要考虑编写自己的路由器。一个超越简单答案的主题。

,

我认为您可以通过以下方式实现。

@page "/{Role}"

@code{
    [Parameter]
    public string Role { get; set; }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。