[英]Is there a way to return null on a custom InputSelect in blazor?
我想將搜索功能添加到我的 blazor 服務器應用程序上的頁面,以允許用戶通過 true、false 或兩者進行搜索。 最初將它作為一個字符串 InputSelect 但現在我回到它我想將它更改為一個更整潔的解決方案,所以我試圖制作一個自定義輸入 select 以從 InputSelect 繼承,它將具有 3 個允許的值:true,false和 null。我正在嘗試將其綁定到布爾值? 我搜索的參數 model class 叫 isVegetarian。
目前,該行顯示“result = null;” 給出一個錯誤,因為“無法將 null 轉換為類型參數‘TValue’。有沒有辦法我可以在這個 function 中返回 null?或者有更好的方法來 go 關於我想做什么?
這是制作自定義布爾的嘗試嗎? 輸入選擇:
// 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>
你必須綁定到一個可為空的: 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; }
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.