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ígitos" data-val-length-max="10" data-val-regex="Solo se Permiten Números" data-val-regex-pattern="(^[0-9]+$)" 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));
}
我在验证必须放置人员身份的数字类型字段时遇到问题,我的数据注释是这样的
[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ígitos" data-val-length-max="10" data-val-regex="Solo se Permiten Números" data-val-regex-pattern="(^[0-9]+$)" 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));
}