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;
}
}
解决方案:
- 如果可以,请使用枚举(它基本上是一个整数,这就是它工作的原因)
- 使用可解析为所需布尔值的帮助器字段(以下示例)
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();}}
}
}
在我的案例中需要单选按钮,因为用户需要进行选择(是或否),并且需要输入。我认为使用枚举是目前最好的解决方案。我试图遵循forInputRadio
,但是使用示例时保存的数据类型是一个字符串。还在努力想办法弄清楚。谢谢你的详细回答。我认为单选按钮只支持字符串和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(); } }
}
}