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)都不在指定范围内时正确显示错误.
注意:也许有人可以扩展此解决方案以仅禁用某些字段进行客户端验证.
希望这有用.
我还注意到jQuery验证不能与ASP MVC范围验证器配合使用(似乎jQuery验证插件要求范围值必须是数字)。
一个简单的解决方案是关闭特定字段的验证。服务器端验证仍然可以工作。
以下示例将从具有“ date”类的所有输入字段中删除“ range”规则:
$('input.date').each(function() {
$(this).rules('remove', 'range');
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17686 次 |
| 最近记录: |