Blazor 使用具有布尔值的InputRadio

Blazor 使用具有布尔值的InputRadio,blazor,blazor-server-side,blazor-client-side,Blazor,Blazor Server Side,Blazor Client Side,我有一个InputRadio控件,如下所示: <InputRadioGroup Name="FooBar" @bind-Value="Foo.Bar"> <InputRadio Name="FooBar" Value=1 />Yes<br> <InputRadio Name="FooBar" Value=0 />No<br> </Inp

我有一个
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
,因为我的应用程序有很多是/否问题,在代码中使用true/false会使事情更容易理解


Blazor中是否有方法配置它,以便
InputRadio
控件可以绑定到布尔值?

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

<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;
    }
}
解决方案:

  • 如果可以,请使用枚举(它基本上是一个整数,这就是它工作的原因)
  • 使用可解析为所需布尔值的帮助器字段(以下示例)
要使helper字段正常工作,您需要可以解析的字符串,并且可能需要它们作为视图模型中的变量,因为只要设置
Value=“@true”
Value=“true”
实际上会尝试查找字段,或使用布尔值,而HTML元素作为字符串匹配。在语法上有点难对付

<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(); } }
    }
}

类型:@Foo.Bar.GetType()

值:@Foo.Bar
字符串值@Foo.BarString



@代码{ 字符串trueVal=“true”; 字符串false=“false”; MyClass Foo{get;set;}=new MyClass(); 公共类MyClass { 公共字符串BarString{get;set;}=“true”; 公共bool栏{get{return bool.Parse(BarString);}set{BarString=value.ToString().ToLowerInvariant();}} } }
在我的案例中需要单选按钮,因为用户需要进行选择(是或否),并且需要输入。我认为使用枚举是目前最好的解决方案。我试图遵循for
InputRadio
,但是使用示例时保存的数据类型是一个字符串。还在努力想办法弄清楚。谢谢你的详细回答。我认为单选按钮只支持字符串和int(因此,enum)是的。我现在使用的是枚举(示例),但保存到数据库的值是字符串“Yes”。我希望它是一个int(0或1),但这也有它的优点。我想是由数据库层来决定是否使用。ToString或not Though我可以在浪费了几个小时后确认我无法让bool正常工作。消息为“无法将“System.String”类型的对象强制转换为“System.Boolean”类型。”
<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(); } }
    }
}