bauer-martin.com

bauer-martin.com

Privater Blog über Programmierung, Cloud, Technik und was sonst noch so anfällt

03 Jul 2020

Blazor InputSelect does not support the type 'System.Int32'.

Weiteres kleines Problem mit Blazor: Ich wollte einer SelectBox (InputSelect) einen Integer-Wert als Binding zuweisen. Das schlug jedoch mit der Fehlermeldung “Blazor InputSelect does not support the type ‘System.Int32’.” fehl. Problem ist, dass die InputSelect von Blazor momentan standardmäßig nur Strings und Enums unterstützt. Die Lösung ist hier ein eigenes InputSelect zu erstellen und das Standard zu überschreiben. Einen Vorschlag dazu gibt es im Issue Tracker von Blazor. Ich habe das ganze gleich noch so erweitert, dass ich nebem einen normalen integer (Int32) auch noch einen short (Int16) verwenden kann.

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;
            }
           
            result = default;
            validationErrorMessage = "The chosen value is not a valid number.";
            return false;
        }
        if (typeof(T) == typeof(short))
        {
            if (short.TryParse(value, out var resultInt))
            {
                result = (T)(object)resultInt;
                validationErrorMessage = null;
                return true;
            }

            result = default;
            validationErrorMessage = "The chosen value is not a valid number.";
            return false;
        }
        
        return base.TryParseValueFromString(value, out result, out validationErrorMessage);
    }
}