Blazor server side Blazor路由对象参数

Blazor server side Blazor路由对象参数,blazor-server-side,Blazor Server Side,我们可以像这样对blazor使用对象参数吗 @page "/account/login/" @page "/account/login/{Customer}" @using Model @(Customer?.Name ?? "Empty") @code { [Parameter] public Customer Customer { get; set; } } 不,仅限于简单类型(int、string等)。我建议不要对字符串使用这种类型的绑定。原因是URL具有保留字符,除非它

我们可以像这样对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; }
}
有几种方法可以克服这个问题

  • 发送一个ID(见上面的示例代码)并执行服务器请求以获取数据
  • 创建应用程序内状态管理器服务,可用于在页面/组件之间传递对象
  • 我遇到过这样一种情况:我需要通过URL将一个复杂的标识令牌字符串发送到blazor组件中,我使用了一个查询字符串,并使用NavigationManager.Uri手动解析该字符串。这篇文章足够长了,如果你想看到我的querystring解析示例,请告诉我


    希望这有帮助

    尝试使用序列化。大概是这样的:

    人员p=新人员()

    记住:

    @使用Newtonsoft.Json

    使用“”格式
     @{ string json = JsonConvert.SerializeObject(p);
        var link = $"OtherComponentName/{json}";
      }