首页 > 解决方案 > Blazor 路由对象参数

问题描述

我们可以像这样在 blazor 中使用对象参数吗?

@page "/account/login/"
@page "/account/login/{Customer}"
@using Model

@(Customer?.Name ?? "Empty")

@code {
   [Parameter]
   public Customer Customer { get; set; }
}

标签: blazor-server-side

解决方案


不,只有简单类型(int、string 等)。我建议不要对字符串使用这种类型的绑定。原因是 URL 具有被转换的保留字符,除非它们位于附加到 URL 末尾的查询字符串中。此外,如果您的字符串包含斜杠,blazor 将截断该字符串。例如

导航到“/account/login/test/123”将导致 id=test。

@page "/account/login/"
@page "/account/login/{id}"
@using Model

@(Customer?.Name ?? "Empty")

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

有几种方法可以克服这个问题。

  1. 发送一个 ID(参见上面的示例代码)并执行服务器请求以获取您的数据。
  2. 创建一个应用内状态管理器服务,您可以使用它在页面/组件之间传递对象。

我遇到过需要通过 URL 将复杂的身份令牌字符串发送到 blazor 组件的情况,我使用了查询字符串并使用 NavigationManager.Uri 手动解析了字符串。这篇文章足够长,如果您想查看我的查询字符串解析示例,请告诉我。

希望这可以帮助!


推荐阅读