簡體   English   中英

有沒有辦法在 blazor 中的自定義 InputSelect 上返回 null?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM