为什么ASP.Net MVC范围属性采用Type?

Ale*_*nor 7 c# asp.net-mvc data-annotations asp.net-mvc-3

我只是想知道为什么Range验证属性可以将Type和两个字符串作为参数?这是用于验证字符串对Enum或类似的东西?

我正在尝试做的是找到一种简单的方法来验证一个3字符串,它必须存在于枚举,任何sugestions?

谢谢,亚历克斯.

gid*_*eon 17

我确实找到了你提到的Range ctor.忍不住调查一下.(所以我在调查时把这个答案写成了日志.)

来自MSDN

public RangeAttribute(
    Type type,
    string minimum,
    string maximum
)
Run Code Online (Sandbox Code Playgroud)

注意:MSDN说Type应该是IComparable.并且,他们的示例描述说明了它的日期比较,而不是!

所以,自从我的生产asp.net mvc3应用程序打开后,我尝试使用这样的日期时间:

[Range(typeof(DateTime),"1-Jan-1910","1-Jan-2060")]
Run Code Online (Sandbox Code Playgroud)

当我运行它时会发生这种情况:

在此输入图像描述

注意虽然我用虚线和没有时间指定了最小值和最大值,但它给出了不同的格式,所以它可能TryParsing是正确的字符串?但我确信它不可能是ICompare客户端的两个!?现在无论我输入什么日期仍然显示错误.(日期为11月3日至20日(20年为2020年).)

我试过char(下面),因为那IComparable也是.一样.它实际上无法在客户端进行范围比较.

[Range(typeof(char), "a", "g")]
Run Code Online (Sandbox Code Playgroud)

可是等等...

只需删除客户端验证!我删除了对JQuery验证和Unobtrusive验证和中提琴的引用!它完美无缺.它会发布,然后在值(Char和Date)都不在指定范围内时正确显示错误.

注意:也许有人可以扩展此解决方案以仅禁用某些字段进行客户端验证.

希望这有用.


jhd*_*drn 5

我还注意到jQuery验证不能与ASP MVC范围验证器配合使用(似乎jQuery验证插件要求范围值必须是数字)。

一个简单的解决方案是关闭特定字段的验证。服务器端验证仍然可以工作。

以下示例将从具有“ date”类的所有输入字段中删除“ range”规则:

$('input.date').each(function() {
    $(this).rules('remove', 'range');
});
Run Code Online (Sandbox Code Playgroud)