我只是想知道为什么Range验证属性可以接受一个Type和两个字符串作为参数?这是为了根据枚举或类似的东西验证字符串吗?
此外,我想做的是找到一种简单的方法来验证枚举中必须存在的 3 个字符的字符串,有什么建议吗?
谢谢, 亚历克斯。
最佳答案
我确实发现你提到的 Range ctor 可疑。忍不住一探究竟。 (所以我在调查的时候把这个答案写成了日志。)
来自 MSDN
public RangeAttribute(
Type type,
string minimum,
string maximum
)
注意:MSDN 说 Type
应该是 IComparable
。而且,他们的示例描述说它用于日期比较,但实际上不是!
因此,由于我打开了我的生产 asp.net mvc3 应用程序,所以我在日期时间如下所示尝试了此操作:
[Range(typeof(DateTime),"1-Jan-1910","1-Jan-2060")]
当我运行它时,会发生这种情况:
请注意,尽管我用虚线指定了最小值和最大值并且没有时间,但它给出了不同的格式,所以它可能 TryParsing
字符串对吗?但我敢肯定它不可能 ICompare
客户端的两者!?现在无论我输入什么日期仍然显示错误。 (日期输入为 11-Mar-20(2020 年为 20)。)
我尝试了 char(如下),因为那也是一个 IComparable
。一样。它实际上无法在客户端进行范围比较。
[Range(typeof(char), "a", "g")]
但是等等...
只需删除客户端验证!我删除了对 JQuery 验证和 Unobtrusive 验证和中提琴的引用!它工作完美。当值(字符和日期)不在指定范围内时,它会发布,然后正确显示错误。
注意:也许有人可以扩展此解决方案以仅禁用某些字段进行客户端验证。
希望这对您有所帮助。
关于c# - 为什么 ASP.Net MVC 范围属性采用类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5366549/