Jul*_*ian 9 asp.net validation rangevalidator
我有一个非常简单的ASP.NET页面,其中包含一些输入字段和验证器.接受双重的一个字段看起来像这样:
<asp:TextBox ID="tbHeight" runat="server" />
<asp:RangeValidator ID="vdHeight" runat="server"
ErrorMessage="Height must be a positive number" Text="*"
ControlToValidate="tbHeight" MinimumValue="0" Type="Double" />
Run Code Online (Sandbox Code Playgroud)
这按预期工作,用户必须输入一个数字> = 0.
更新:这不会像预期的那样工作(项目中的一些奇怪的错误).有关详细信息,请参阅以下答案的注释
然后我尝试接受一个整数的字段:
<asp:TextBox ID="tbGrossTonnage" runat="server" />
<asp:RangeValidator ID="vdGrossTonnage" runat="server"
ErrorMessage="Gross Tonnage must be a positive whole number" Text="*"
ControlToValidate="tbGrossTonnage" MinimumValue="0" Type="Integer" />
Run Code Online (Sandbox Code Playgroud)
加载ASP页面时,会出现以下错误:'vdGrossTonnage'的MaximumValue属性值''无法转换为'Integer'类型.
我在系统中没有任何特定的最大值要求,所以我只想"默认" Int32.MaxValue
(虽然我必须输入2,147,483,647,因为MaximumValue
似乎不接受Int32.MaxValue
常量).
为什么RangeValidator
类型的Integer
a不会接受缺失的MaximumValue
属性,但对于其中一种类型,Double
这是可以的?
Chr*_*Rea 15
在MinimumValue
和MaximumValue
该属性RangeValidator
类的回报string.Empty
作为其默认时未设置.
接下来,还会发生Convert()
由实现的受保护方法BaseCompareValidator
(用于将字符串属性转换为值)调用int.Parse()
该ValidationDataType.Integer
案例. int.Parse()
不喜欢空字符串并将抛出异常.
但是,在这种情况下ValidationDataType.Double
,Convert()
首先调用另一个受保护的方法ConvertDouble()
(而不是double.Parse()
),并且在该方法中,当检测到空字符串时,它显式返回字符串值"0",并且该字符串值"0"稍后通过double.Parse()
进入0d
.
整数情况不会受益于这种string.Empty
到"0" 的映射.
因此,这种双重性.魔鬼在细节中,而Reflector是你的朋友.
归档时间: |
|
查看次数: |
18508 次 |
最近记录: |