C#:范围的DataAnnotation不适用于前导'+';签名

C#:范围的DataAnnotation不适用于前导'+';签名,c#,data-annotations,validationattribute,C#,Data Annotations,Validationattribute,我有一组可为空的十进制属性,这些属性由值为-40.00到+40.00的范围验证属性修饰,但当用户输入带前导正号(+)的正值时,验证返回错误结果,显示错误消息。然而,-1.50的值将返回真实的验证结果 无法删除前导加号(+),因为它是业务规则 [Display(ResourceType = typeof(Translation), Name = "Profit_Q1")] [Range(-40.00, +40.00)] public decimal? profit_q1{ ge

我有一组可为空的十进制属性,这些属性由值为-40.00到+40.00的范围验证属性修饰,但当用户输入带前导正号(+)的正值时,验证返回错误结果,显示错误消息。然而,-1.50的值将返回真实的验证结果

无法删除前导加号(+),因为它是业务规则

[Display(ResourceType = typeof(Translation), Name = "Profit_Q1")]
[Range(-40.00, +40.00)]
public decimal? profit_q1{ get; set; }

有什么解决办法吗?或者我做错了什么?我已经在网上和堆栈上搜索过了,但似乎找不到一个稍微相似的答案。

设置一个可为空的小数点并检查该值是否在某个特定的范围内是没有意义的range@spzvtbg你不知道他是怎么用这个的,所以我看不出你的评论有什么道理。我怀疑这有什么关系,但你有没有尝试过这个超负荷的问题接受类型和两个字符串值的范围属性?您真正想要的是能够使用正号指定数字样式,但我不知道如何做到这一点。作为最后的手段,您可以始终创建自定义验证程序。希望有更好的方法。@SushmitSaxena-使用[Range(typeof(decimal),“-40,00”,“+40,00”,ErrorMessage=“Invalid amount!”)或[Range(typeof(decimal),“-40.00”,“+40.00”,ErrorMessage=“Invalid amount!”,ConvertValueInVariantCulture=true,ParseLimitsInInvariantCulture=true)]。请记住,默认情况下,值的格式为十进制逗号,而不是点分隔符,这意味着比较器的+40.00等于4000。你可以改进你的问题,你写的-1.50是有效的,也许你的意思是-1.5,比较器是-15,仍然大于-40,00