c# - 当值不是数字时,自定义数字验证无法正常工作
问题描述
我有自定义验证检查另一个字段,然后确定有问题的字段是否在某个数字范围内。每当用户输入数字时,它都可以正常工作。但是,如果用户传入一个非数字,这个非数字(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);
});
解决方案
不知道它是否有帮助,但我现在在我的所有项目中都使用了这个功能:
public static double DoubleParseAdvanced(this string strToParse, char decimalSymbol = '.')
{
string tmp = Regex.Match(strToParse, @"([-]?[0-9]+)([\s])?([0-9]+)?[." + decimalSymbol + "]?([0-9 ]+)?([0-9]+)?").Value;
if (tmp.Length > 0 && strToParse.Contains(tmp))
{
var currDecSeparator = System.Windows.Forms.Application.CurrentCulture.NumberFormat.NumberDecimalSeparator;
tmp = tmp.Replace(".", currDecSeparator).Replace(decimalSymbol.ToString(), currDecSeparator);
return double.Parse(tmp);
}
return double.NegativeInfinity;
}
第一,它适用于任何计算机文化(500.5 或 500,5)
第二,如果用户输入的不是数字,你只需要返回 NegativeInfinite,所以你只需要检查返回的值是否不等于 NegativeInfinity 就可以知道值是否正确。
推荐阅读
- android - 为什么图像在 TabLayout 的中心?
- python - 在python中的值和键对中添加值列表
- python - 单击按钮时如何从另一个 Python 文件中读取 QLineEdit 值的值
- c# - 使用 c# 使用 IHttpActionResult 将请求类型作为 XML 发送
- python - 如何使用 Keras 调用模块而不会使 Tkinter 菜单崩溃?
- model - TYPO3 - 如何将后端用户作为模型属性?
- javascript - 如何修复背景颜色分配错误?
- java - 合并排序代码中的 ConcurrentModificationException
- ajax - 您如何在 php 中使用 ajax 发布表单?
- reactjs - 用玩笑进行测试时如何在对象道具中进行间谍模拟功能?