Blazor语言 - 如何防止文本框(InputText)中的非数字字符?



我在blazor中有一个InputText,我想防止非数字字符,基本的razor和c#代码是什么?这里是我需要它的工作方式,用户输入一个字符,它拒绝所有的输入在一起,并显示一个验证消息,说只有数字是允许的。到目前为止,我已经尝试使用regex标记范围属性,但它不拒绝非数字字符。

这实际上是一个html/javascript的东西。添加

onkeypress="return (event.charCode !=8 && event.charCode ==0 || (event.charCode >= 48 && event.charCode <= 57))"

HTML输入元素中的将阻止用户输入非数字。如果需要显示验证消息,我宁愿使用

之类的内容。@oninput="async () => await isInputNumeric()"

在元素中创建函数

private async Task isInputNumeric() { // call javascript to check the what is inside you input element (what is the last character) and act accordingly -> show message and delete the non-numeric character OR carry on if input is numeric }

你必须使用javascript,因为blazor还没有c#的方式来访问html元素。

dinozaver很好地回答了你的问题,但我想补充一些(我认为非常重要的)建议:您没有义务使用Blazor的自定义控件,这些控件主要处理验证。

如果你想要一个数字输入,我建议只使用一个:

<input type="number" @bind="MyImportantNumber" />
@code 
{
int MyImportantNumber { get; set; }
}

你可以在这里获得更多信息。HTML数字输入允许您设置最小/最大值,微调控件的步长等。此外,在移动设备上使用html数字控件将弹出一个数字键盘,用户可能会觉得方便。

如果你是在EditForm上下文中,你可以使用blazor组件InputNumber来编辑Int32, Int64, Int16,单,双,十进制。根据Blazor文档,它的渲染如下:

<input type="number"/>

使用示例:

<EditForm Model="myObject">
<InputNumber @bind-Value="myObject.mydouble" />
<ValidationMessage For="()=> myObject.mydouble"/>
</EditForm>
@code {
private MyObject myObject = new MyObject();
class MyObject {
public double mydouble { get; set; }
}
} 

多亏了ValidationMessage组件,如果用户尝试输入非数字字符,就会显示一条消息。绑定变量的类型可以由编译器推断出来,或者您可以显式地指出:

<InputNumber TValue="double" @bind-Value="myObject.mydouble" />

我认为你可以用Html标签解决它,只需使用:您可以在这里查看文档。https://developer.mozilla.org/es/docs/Web/HTML/Element/input/number

不能评论别人的答案,但它工作完美!

添加到Host.cshtml中的Script部分:

$(document).on("keypress",".numbers", function (e) {
return (e.charCode != 8 && e.charCode == 0 || (e.charCode >= 48 && e.charCode <= 57));
});
$(document).on("paste", ".numbers", function (e) {
e.preventDefault();
let paste = (e.originalEvent.clipboardData || window.clipboardData).getData('text');
this.value = paste.replace(/D/g, '');
this.dispatchEvent(new Event('change'));
});

输入必须包含class="number ":

<input type="text" class="numbers" @bind-value="@anyValue"/>

可以添加jquery作为辅助工具。

<input type="text" @bind="Model" class="NumberOnly" />

并将此代码放在MainLayout.razor

<script>  
$(document).on("keypress", ".NumberOnly", function(e){
return (e.charCode !=8 && e.charCode ==0 || (e.charCode >= 48 && e.charCode <= 57));
});
</script>

相关内容

  • 没有找到相关文章

最新更新