首页 > 解决方案 > 使用带布尔值的 InputRadio

问题描述

我有一个InputRadio如下所示的控件:

<InputRadioGroup Name="FooBar" @bind-Value="Foo.Bar">
    <InputRadio Name="FooBar" Value=1 />Yes<br>
    <InputRadio Name="FooBar" Value=0 />No<br>
</InputRadioGroup>

Foo.Bar当前是一个可为空的int,因为它似乎int是内置InputRadio控件绑定所期望的。我宁愿设置Foo.Bar为可空bool而不是,int因为我的应用程序有很多是/否问题,并且在代码中使用真/假会使事情变得更容易和更具可读性。

Blazor 中有没有办法对其进行配置,以便InputRadio控件可以绑定到布尔值?

标签: blazorblazor-server-sideblazor-client-side

解决方案


首先,获取布尔值通常是一个复选框,因此您可以先尝试一下。

<EditForm Model="@Foo">

    Type: @Foo.Bar.GetType()
    <br />
    Value: @Foo.Bar
    <br /><br />

    <InputCheckbox @bind-Value="@Foo.Bar">I understand</InputCheckbox>

</EditForm>

@code{
    MyClass Foo { get; set; } = new MyClass();

    public class MyClass
    {
        public bool Bar { get; set; } = true;
    }
}

如果您必须使用单选按钮,请继续阅读。

我认为理想情况下,这应该与实际bool值一起使用,但它似乎没有,这是一个复制品(也许你可以在他们的仓库中用 MS 记录它) - 最初它似乎可以解析,但改变值会抛出它无法从字符串解析。这向我表明他们只支持string单选int按钮组。

<EditForm Model="@Foo">

    Type: @Foo.Bar.GetType()
    <br />
    Value: @Foo.Bar
    <br /><br />

    <InputRadioGroup Name="FooBar" @bind-Value="@Foo.Bar">
        <InputRadio Name="FooBar" Value="@true" />Yes<br>
        <InputRadio Name="FooBar" Value="@false" />No<br>
    </InputRadioGroup>

</EditForm>

@code{
    MyClass Foo { get; set; } = new MyClass();

    public class MyClass
    {
        public bool Bar { get; set; } = true;
    }
}

解决方案:

  • 如果可以,请使用枚举(它基本上是一个整数,这就是它起作用的原因)
  • 使用可以解析为所需布尔值的辅助字段(示例如下)

要使辅助字段起作用,您需要可以解析的字符串,并且您可能需要将它们作为视图模型中的变量,因为只是设置Value="@true"Value="true"实际上会尝试查找字段或使用布尔值,而HTML 元素作为字符串匹配。语法有点问题 22。

<EditForm Model="@Foo">

    Type: @Foo.Bar.GetType()
    <br />
    Value: @Foo.Bar
    <br />
    String Value @Foo.BarString
    <br /><br />

    <InputRadioGroup Name="FooBar" @bind-Value="@Foo.BarString">
        <InputRadio Name="FooBar" Value="@trueVal" />Yes<br>
        <InputRadio Name="FooBar" Value="@falseVal" />No<br>
    </InputRadioGroup>

</EditForm>

@code{
    string trueVal = "true";
    string falseVal = "false";
    MyClass Foo { get; set; } = new MyClass();

    public class MyClass
    {
        public string BarString { get; set; } = "true";
        public bool Bar { get { return bool.Parse(BarString); } set { BarString = value.ToString().ToLowerInvariant(); } }
    }
}

推荐阅读