【发布时间】:2019-04-17 17:37:21
【问题描述】:
我有自定义验证检查另一个字段,然后确定有问题的字段是否在某个数字范围内。每当用户输入数字时,它都可以正常工作。但是,如果用户传入一个非数字,则该非数字(value 参数)不会传递给验证。相反,null 被传递给验证。我宁愿输入带有逗号的数字。相反,用户会看到一个神秘的"The value XXX is not valid for XXX,这没有帮助。我在这个字段上还有[Required] 和[Numeric] 数据注释。这些通常会发现任何问题。但是,如果用户输入带逗号的有效数字,则该值不会传递给我的自定义验证。我不确定问题出在哪里。有什么想法吗?我尝试通过 javascript 去除逗号,但传递给我的自定义验证的值仍然为空。这是我正在调用的自定义验证:
public sealed class RequiresRangeAmount : ValidationAttribute
{
public RequiresRangeAmount(string property)
{
Property = property;
}
public string Property { get; set; }
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
var property = validationContext.ObjectType.GetProperty(Property);
if (property != null)
{
var loanSubType = (int)property.GetValue(validationContext.ObjectInstance, null);
if (loanSubType == LoanSubTypeConstants.Visa|| loanSubType == LoanSubTypeConstants.Visa2)
{
var valueConverted = Convert.ToDecimal(value);
if (valueConverted < 5000 || valueConverted > 75000)
{
return new ValidationResult(ErrorMessage);
}
}
}
return null;
}
}
这里正在使用:
[Required]
[Numeric]
[RequiresRangeAmount("LoanSubType", ErrorMessage = "A VISA must be in XXX range.")]
[DisplayName("Requested Loan Amount")]
public decimal? RequestedAmount { get; set; }
去掉逗号的前端没有帮助:
$("#mainForm").submit(function() {
var strippedCommasAmount = $("#RequestedAmount").val().replace(/,/g, '');
$("#RequestedAmount").val(strippedCommasAmount);
});
【问题讨论】:
-
请向我们展示一个完整的示例以及您收到的错误消息。
-
我不确定您还想要什么?当我包含逗号时,自定义验证会将传入的值读取为 null。当我不包含逗号时,该值成功传递到自定义验证中。
-
逗号会使值变为字符串,然后您将遇到绑定问题。
-
但我什至尝试在前端去掉逗号,但这并没有解决它。我已经添加了要显示的代码。
-
如果你有一个点而不是逗号怎么办?
标签: c# asp.net-mvc validation