【问题标题】:Blazor 3.1 Component Tag Helper parametersBlazor 3.1 组件标记帮助程序参数
【发布时间】:2026-01-30 22:20:04
【问题描述】:

我正在尝试使用 3.1 中的新标签助手将参数传递到剃须刀页面上的 Blazor 组件,它适用于整数类型,但如果我更改为字符串字符串,则会引发错误。我错过了什么?

组件:

<p>Test Parameter: @TestParameter</p>

@code {
  [Parameter]
  public int TestParameter { get; set; }

}

剃刀页面:

@page "/test"
@model BlazorTest.testModel
@{
    Layout = null;
}
<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>test</title>
</head>
<body>

  <component type="typeof(TestComponent)" render-mode="ServerPrerendered" param-TestParameter="20" />

  <script src="~/_framework/blazor.server.js"></script>
</body>
</html>

将组件更改为以下原因:

InvalidCastException:无法将“System.Int32”类型的对象转换为“System.String”类型。

<p>Test Parameter: @TestParameter</p>

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

}

【问题讨论】:

  • 尝试使用 js 字符串表示法:"'20'" 或 '"20"'
  • @aguafrommars 成功了。我以为我什么都试过了,但我想我没有尝试过那种语法。谢谢。

标签: parameters components blazor


【解决方案1】:

你应该这样做:

 <p>Test Parameter: @TestParameter</p>

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

}

还有这个:

<app>
        @{
            var val = "Hello world";
        }
        <component type="typeof(TestComponent)" render-mode="ServerPrerendered" param-TestParameter="@(val)" />
    </app>

这只是一个有根据的猜测,您应该使用 var 定义所需类型的变量,然后让它在 Razor 表达式中进行计算。因此,如果你的参数属性被传递一个整数,你应该像这样:

  @{
        var val = 120;
   }

【讨论】:

  • 这把我带到了我想要的地方。我基本上需要将一个已知类型的对象传递给一个参数。