Blazor 路由对象参数

Blazor routing object parameter

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

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

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

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

否,仅限简单类型(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. 创建应用内状态管理器服务,您可以使用它在 pages/components 之间传递对象。

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

希望对您有所帮助!

尝试使用序列化。像这样:

Person p = new Person();

 @{ string json = JsonConvert.SerializeObject(p);
    var link = $"OtherComponentName/{json}";
  }

记住:

@使用Newtonsoft.Json;