Blazor输入选择布尔问题

Blazor输入选择布尔问题,blazor,Blazor,我使用InputSelectNumber类作为模板制作的InputSelectfor boolean遇到了一个奇怪的问题,我确信您已经看到该类被共享(见下文): public类InputSelectNumber:InputSelect { 受保护的重写bool TryParseValueFromString(字符串值,out T结果, 输出字符串验证错误消息) { if(typeof(T)=typeof(int)) { if(int.TryParse(值,out var resultInt))

我使用InputSelectNumber类作为模板制作的InputSelectfor boolean遇到了一个奇怪的问题,我确信您已经看到该类被共享(见下文):

public类InputSelectNumber:InputSelect
{
受保护的重写bool TryParseValueFromString(字符串值,out T结果,
输出字符串验证错误消息)
{
if(typeof(T)=typeof(int))
{
if(int.TryParse(值,out var resultInt))
{
结果=(T)(对象)resultInt;
validationErrorMessage=null;
返回true;
}
其他的
{
结果=默认值;
validationErrorMessage=“所选值不是有效数字。”;
返回false;
}
}
其他的
{
返回base.TryParseValueFromString(值、输出结果、输出验证错误消息);
}
}
}
下面,通过一些调整,使它可以与布尔值一起工作(它确实可以正常工作):

公共类InputSelectBoolean:InputSelect { 受保护的重写bool TryParseValueFromString(字符串值,out T结果, 输出字符串验证错误消息) { if(typeof(T)=typeof(bool)) { if(bool.TryParse(值,out var resultBool)) { 结果=(T)(对象)结果工具; validationErrorMessage=null; 返回true; } 其他的 { 结果=默认值; validationErrorMessage=“所选值不是有效的布尔值。”; 返回false; } } 其他的 { 返回base.TryParseValueFromString(值、输出结果、输出验证错误消息); } } } 然后在razor页面上,实现是:

<EditForm Model="@isMyConverted">
    <InputSelectBoolean @bind-Value="@isMyConverted">
        <option value="true" selected>USD</option>
        <option value="false">XOM</option>
    </InputSelectBoolean>
</EditForm>
 
@code {
    public bool @isMyConverted = false;
}

美元
XOM
@代码{
public bool@isMyConverted=false;
}
它实际上工作得很完美,并且它做出了它应该做的改变。但是,在选择器窗格上,默认情况下它始终为空,因此不显示USD或XOM。我必须选择一个值两次,它才能保持显示在窗格中。否则,它将保持为空(即使对实际变量的更改完全发生)

如果我将整个内容更改为Int输入,如下所示:

<EditForm Model="@isMyConverted">
    <InputSelectNumber @bind-Value="@isMyConverted">
        <option value="1" selected>USD</option>
        <option value="2">XOM</option>
    </InputSelectNumber>
</EditForm>

@code {
public int isMyConverted = 1;
}

美元
XOM
@代码{
公共整数isMyConverted=1;
}

一切都很好,所选的值如预期的那样出现在选择器窗格中。任何帮助都将不胜感激。

true和true之间的字符串不匹配

有两种方法可以解决此问题:

1。更改选项值(以大写字母开头)


如果您只想使用InputSelectBoolean解析布尔参数(如前面提到的名称),我已经对您的代码进行了一些优化:

public class InputSelectBoolean : InputSelect<bool>
{
    protected override bool TryParseValueFromString(string? value, out bool result,
        out string validationErrorMessage)
    {
        if (bool.TryParse(value, out var resultBool))
        {
            result = resultBool;
            validationErrorMessage = string.Empty;
            return true;
        }

        result = default!;
        validationErrorMessage = "The chosen value is not a valid boolean.";
        return false;
    }
}
公共类InputSelectBoolean:InputSelect { 受保护的重写bool TryParseValueFromString(string?值,out bool结果, 输出字符串验证错误消息) { if(bool.TryParse(值,out var resultBool)) { 结果=结果池; validationErrorMessage=string.Empty; 返回true; } 结果=默认值!; validationErrorMessage=“所选值不是有效的布尔值。”; 返回false; } }
非常感谢您的支持!工作就像一种魅力,作为一个懒惰的程序员,肯定会使用这种方式(1.)
<EditForm Model="@isMyConverted">
    <InputSelectNumber @bind-Value="@isMyConverted">
        <option value="1" selected>USD</option>
        <option value="2">XOM</option>
    </InputSelectNumber>
</EditForm>

@code {
public int isMyConverted = 1;
}
  <InputSelectBoolean @bind-Value="isMyConverted">

    <option value="True">true</option>

    <option value="False">false</option>

</InputSelectBoolean>
   protected override string FormatValueAsString(bool value)

    {

        return value.ToString().ToLower();

    }
public class InputSelectBoolean : InputSelect<bool>
{
    protected override bool TryParseValueFromString(string? value, out bool result,
        out string validationErrorMessage)
    {
        if (bool.TryParse(value, out var resultBool))
        {
            result = resultBool;
            validationErrorMessage = string.Empty;
            return true;
        }

        result = default!;
        validationErrorMessage = "The chosen value is not a valid boolean.";
        return false;
    }
}