【发布时间】:2021-03-06 11:21:36
【问题描述】:
我使用 InputSelect for boolean 时遇到了一个奇怪的问题,我使用 InputSelectNumber 类作为模板,我相信你已经看到它被共享(见下文):
public class InputSelectNumber<T> : InputSelect<T>
{
protected override bool TryParseValueFromString(string value, out T result,
out string validationErrorMessage)
{
if (typeof(T) == typeof(int))
{
if (int.TryParse(value, out var resultInt))
{
result = (T)(object)resultInt;
validationErrorMessage = null;
return true;
}
else
{
result = default;
validationErrorMessage = "The chosen value is not a valid number.";
return false;
}
}
else
{
return base.TryParseValueFromString(value, out result, out validationErrorMessage);
}
}
}
在下面,经过一些调整,它可以与布尔值一起使用(它确实可以正常工作):
public class InputSelectBoolean<T> : InputSelect<T>
{
protected override bool TryParseValueFromString(string value, out T result,
out string validationErrorMessage)
{
if (typeof(T) == typeof(bool))
{
if(bool.TryParse(value, out var resultBool))
{
result = (T)(object)resultBool;
validationErrorMessage = null;
return true;
}
else
{
result = default;
validationErrorMessage = "The chosen value is not a valid boolean.";
return false;
}
}
else
{
return base.TryParseValueFromString(value, out result, out validationErrorMessage);
}
}
}
那么在剃须刀页面上,实现是:
<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;
}
它实际上工作得很好,它做出了它应该做的改变。但是,在选择器窗格中,默认情况下它始终为空,因此不会显示 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;
}
一切正常,所选值按预期显示在选择器窗格中。任何帮助将不胜感激。
【问题讨论】:
标签: blazor