无法将 <select> 的结果绑定到 bool

Can't bind result of <select> to bool

我的剃须刀组件:

<label for="Title">Leasing?</label>
<select class="form-control" @bind="IsLeasing">
    <option value="" selected >Please choose...</option>
    <option value="True">Yes</option>
    <option value="False">No</option>
</select>

code {
    private bool isLeasing { get; set; }
}

这段代码的问题是,只要我选择一个选项,呈现的 select 框就会立即切换回初始选项。我是 运行 BlazoredModal 中的那个代码,但我认为这不重要。

A Blazor/Razor <select> 始终适用于类型 string。因此,您需要来回转换值,如本例所示:

@code {
    private bool IsLeasing
    {
        get => IsLeasingString == "True";
        set => IsLeasingString = value.ToString();
    }
    private string IsLeasingString { get; set; }
}

<label for="Title">Leasing: @IsLeasing</label>
<select class="form-control" @bind="IsLeasingString">
    <option value="" selected>Please choose...</option>
    <option value="True">Yes</option>
    <option value="False">No</option>
</select>

PS:@bind 参数 区分大小写,因此您问题中的代码无法按原样编译。请尽可能准确,并尽量避免使用临时代码...

绑定 属性 由于数据类型的不同在这里不起作用。如果 bool 类型和 <select> 适用于字符串,则您尝试绑定的内容。您可以添加一个 onchange 处理程序来执行更改,然后解析结果并将其分配给 IsLeasing

剃刀标记

<select class="form-control" @onchange="(e) => OnLeasingChanged(e.Value)">
    <option value="" selected >Please choose...</option>
    <option value="True">Yes</option>
    <option value="False">No</option>
</select>

代码

private bool? IsLeasing { get; set; }

void OnLeasingChanged(object args)
{
    if(string.IsNullOrEmpty(args.ToString()))
    {
        IsLeasing = null;    
        return;
    }
        
    bool.TryParse(args.ToString(),out var result);        
    IsLeasing = result;
}