ASP.NET 核心 MVC 中的数字字段验证错误

Error in validation of numeric field in ASP.NET Core MVC

我在验证必须放置人员身份的数字类型字段时遇到问题,我的数据注释是这样的

 [Required(AllowEmptyStrings = false, ErrorMessage = "El RUT es Obligatorio")]
 [RegularExpression("(^[0-9]+$)", ErrorMessage = "Solo se Permiten Números")]
 [StringLength(10, ErrorMessage = "El RUT solo permite 10 dígitos")]

这是我对注册的看法

<div class="form-group col-md-6">
    <label>RUT Paciente:</label>
    <input asp-for="MODEL_PACIENTE.PAC_RUT" type="number" placeholder="RUT" class="form-control" autofocus />
    <span asp-validation-for="MODEL_PACIENTE.PAC_RUT" class="text-danger"></span>
</div>

错误是当我输入字母 e 时,它​​是唯一允许我输入大写和小写的字母。

如何正确验证该字段?

见下文post:

这就是为什么您的 <input> 接受 'e' 信件的答案。但是,不用说,MVC 验证拒绝它。

post不包含数据模型定义。因此,我即兴...

我将数据模型 class 称为 DataModel:

public class DataModel
{
    [Required(AllowEmptyStrings = false, ErrorMessage = "El RUT es Obligatorio")]
    [RegularExpression("(^[0-9]+$)", ErrorMessage = "Solo se Permiten Números")]
    [StringLength(10, ErrorMessage = "El RUT solo permite 10 dígitos")]
    public string PAC_RUT { get; set; }
}

并使用 HtmlHelper 生成 HTML:

@model DataModel
    
<div class="form-group">
    @Html.LabelFor(m => m.PAC_RUT)
    <p>@Html.TextBoxFor(m => m.PAC_RUT, htmlAttributes: new { type="number", autofocus = "autofocus" })</p>
    @Html.ValidationMessageFor(m => m.PAC_RUT)
</div>
   ...

而这是.cshtml编译到HTML。因此,正如您在使用 HtmlHelper 时看到的那样,生成的 HTML 包括一组仅允许输入 10 位数字的附加属性:

<div class="form-group">
    <label for="PAC_RUT">PAC_RUT</label>
    <p><input class="input-validation-error" data-val="true" data-val-length="El RUT solo permite 10 d&#xED;gitos" data-val-length-max="10" data-val-regex="Solo se Permiten N&#xFA;meros" data-val-regex-pattern="(^[0-9]&#x2B;$)" data-val-required="El RUT es Obligatorio" id="PAC_RUT" name="PAC_RUT" type="number" value="" /></p>
    <span class="field-validation-error" data-valmsg-for="PAC_RUT" data-valmsg-replace="true">El RUT es Obligatorio</span>
</div>

对于字母 'e' 的问题,我使用了脚本 en el event onkeypress="return Solo Numeros(event); 我的输入

   <div class="form-group col-md-6">
    <label>RUT Paciente:</label>
    <input asp-for="MODEL_PACIENTE.PAC_RUT" type="number" placeholder="RUT" onkeypress="return SoloNumeros(event);" class="form-control" autofocus />
    <span asp-validation-for="MODEL_PACIENTE.PAC_RUT" class="text-danger"></span>
   </div>

我把脚本代码放在这里

function SoloNumeros(e) {
        var keynum = window.event ? window.event.keyCode : e.which;
        if ((keynum == 8 || keynum == 48))
            return true;
        if (keynum <= 47 || keynum >= 58) return false;
        return /\d/.test(String.fromCharCode(keynum));
    }