gpt4 book ai didi

ASP.NET RangeValidator 与 MaximumValue 的怪异

转载 作者:行者123 更新时间:2023-12-02 00:22:36 28 4
gpt4 key购买 nike

我有一个非常简单的 ASP.NET 页面,其中包含一些输入字段和验证器。接受 double 值的一个字段如下所示:

<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" />

这按预期工作,用户必须输入 >= 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" />

加载 ASP 页面时,出现以下错误:“vdGrossTonnage”的 MaximumValue 属性的值“”无法转换为“Integer”类型。

我在系统中没有任何特定的最大值要求,因此我希望将其“默认”为 Int32.MaxValue (尽管我必须输入 2,147,483,647,因为 MaximumValue 似乎不接受 Int32.MaxValue 常量)。

为什么是RangeValidator类型 Integer不接受缺失的MaximumValue属性,但针对 Double 类型之一这样可以吗?

最佳答案

RangeValidator 类的 MinimumValueMaximumValue 属性在未设置时返回 string.Empty 作为默认值.

接下来,BaseCompareValidator 实现的 Convert() protected 方法(用于将字符串属性转换为值)也调用了 int。 Parse() 适用于 ValidationDataType.Integer 情况。 int.Parse() 不喜欢空字符串,会抛出异常。

但是,在 ValidationDataType.Double 的情况下,Convert() 首先调用另一个 protected 方法 ConvertDouble() (而不是 double.Parse()),并且在该方法中,当检测到空字符串时,它显式返回字符串值“0”,并且稍后会解析该字符串值“0” ,通过 double.Parse() 转换为 0d

整数情况不会从 string.Empty 到“0”的映射中受益。

因此,差异。细节决定成败,Reflector是你的 friend 。

关于ASP.NET RangeValidator 与 MaximumValue 的怪异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5406124/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com