我想在blazor服务器应用程序的页面中添加搜索功能,允许用户按true、false或两者兼有进行搜索。最初它是一个字符串InputSelect,但现在我回到它,我想把它改成一个更整洁的解决方案,所以我试图从InputSelect中继承一个自定义的输入选择,它将有3个允许的值:true、false和null。我想把它绑在一个bool上?我的搜索模型类中名为isVegetarian的参数。
此刻,写着";结果=空"给出一个错误,因为";无法将null转换为类型参数"TValue"。有没有办法在这个函数中返回null?或者有更好的方法来实现我想做的事情吗?
这是制作自定义bool的尝试?输入选择:
// Start of code
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace RecipeManager.Web.Shared
{
public class CustomNullableBoolInputSelect<TValue> : InputSelect<TValue>
{
protected override bool TryParseValueFromString(string value, out TValue result,
out string validationErrorMessage)
{
if (value.ToLower() == "null")
{
result = null;
validationErrorMessage = null;
return true;
}
if (typeof(TValue) == typeof(bool?))
{
if (bool.TryParse(value, out bool resultbool))
{
result = (TValue)(object)resultbool;
validationErrorMessage = null;
return true;
}
else
{
result = default;
validationErrorMessage =
$"The selected value {value} is not a valid bool?";
return false;
}
}
else
{
return base.TryParseValueFromString(value, out result,
out validationErrorMessage);
}
}
}
}
这里是它的来源:
<div class="col-12 row">
<label class="col-6">Vegetarian</label>
<CustomNullableBoolInputSelect class="form-control col-6" @bind-Value="searchModel.isVegetarian">
<option value="null" selected>All</option>
<option value="True">Vegetarian</option>
<option value="False">Not Vegetarian</option>
</CustomNullableBoolInputSelect>
</div>
您必须绑定到可为null的:bool?
。
<EditForm Model=@someModel>
<InputSelect @bind-Value=@someModel.SomeValue>
<option value="">Null</option>
<option value="true">True</option>
<option value="false">False</option>
</InputSelect>
</EditForm>
[@someModel.SomeValue.ToString()]
[@(someModel.SomeValue == null)]
@code {
SomeModel someModel = new SomeModel();
class SomeModel
{
public bool? SomeValue { get; set; }
}
}