Cześć,
piszę sobie własny component w blazor, który dziedziczy po klasie InputBase i zawiera html-owy <input> w którym umieściłem następujące atrybuty:

@oninput="@(async e => await OnInput(e))"
@onkeyup="@(async e => await OnKeyUp(e))"
@onkeydown="@(async e => await OnKeyDown(e))"
@onkeypress="@(async e => await OnKeyPress(e))"
@onkeydown:preventDefault=_prevent_onkeydown
@onkeypress:preventDefault=_prevent_onkeypress
@oninput:preventDefault=_prevent_oninput
@onkeyup:preventDefault=_prevent_onkeyup

W funkcji OnKeyDown mam warunek typu:

if(!Regex.IsMatch(e.Key, "[0-9]"))
{
    _prevent_onkeydown = true;
    _prevent_onkeypress = true;
    _prevent_oninput = true;
    _prevent_onkeyup = true;
}

Czyli jeśli wprowadzany znak jest inny niż 0-9 to powinno blokować domyślne zachowanie inputa.
Problem jest taki, że to nie działa dla wciśniętych klawiszy m.in. delete i backspace. Tzn. warunek jest spełniony i zmienne _prevent_onkeydown przyjmują wartość true, ale delete oraz backspace kasują zawartość pola input - a ja potrzebuję w pewnych sytuacjach zablokować taką możliwość.
Czy może mi ktoś wyjaśnić dlaczego to nie działa lub jak zablokować kasowanie znaków przez delete / backspace?
Obecnie ominąłem problem i w funkcji OnInput przywracam poprzednią wartość inputa, ale to takie bardziej obejście i wolałbym to inaczej rozwiązać.