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