I'm creating a generic form project, the kind of type where you insert a model and the form is generated for you. In order for this to work I now work on a generic input component, which will render specefic attributes for a type ("number", "string"...).Only problem - I can't insert negative values when I'm handling a model with an int (input type="number").When I insert a negetive value and unfocus the input box, the entered value litterally dissapear and I see the followig messege in the browser console (tried to insert -1) :
The specified value "â-1" cannot be parsed, or is out of range.
I've tried to set the "min" attribute, but It didn't do anything.I know I can change the input type to "text" and implement my own validation, but I really just need that simple support for integers.
For a mysterious reason, the expected behaviour obsereved whenever I debug the app in visual studio, which makes the error even harder to detect.
Here is some of the relevant code:
GenericInputComponent.cs:
namespace GenericInput.Components.GenericInputComponent{ public partial class GenericInputComponent<FieldType> { [Parameter] [EditorRequired] public FieldType? Field { get; set; } [Parameter] public EventCallback<FieldType> FieldChanged { get; set; } private async Task UpdateFieldFromChild(FieldType? value) { await FieldChanged.InvokeAsync(value); } private InputAttributes.InputAttributes _attributes = InputAttributesFactory.GetAttributes(typeof(FieldType)); }}GenericInputComponent.razor :
@typeparam FieldType<label>Some Label</label><input @attributes="_attributes.GetSplattableAttributes()" @bind:get="Field" @bind:set="UpdateFieldFromChild" />InputAttributes.cs file :
global using SplattableAttributes = System.Collections.Generic.Dictionary<string, object>;namespace GenericInput.Components.GenericInputComponent.InputAttributes{ public class InputAttributes { private SplattableAttributes _attributes = new(); public SplattableAttributes GetSplattableAttributes() { return _attributes; } public void Add(string key, object value) { _attributes.Add(key, value); } public void Add(SplattableAttributes attrs) { foreach (var attr in attrs) { Add(attr.Key, attr.Value); } } public void Remove(string key) { _attributes.Remove(key); } }}IntInputAttributes.cs :
namespace GenericInput.Components.GenericInputComponent.InputAttributes{ public class IntInputAttributes : InputAttributes { public IntInputAttributes() { Add("type", "number"); Add("min", "-5000"); } }}Home.razor :
@using GenericInput.Components.GenericInputComponent;@page "/"<GenericInputComponent @bind-Field="TestInt"></GenericInputComponent><p> TestInt value:</p><p> @TestInt</p>@code{ public int TestInt { get; set; } = 0;}