4

Win 7 上的 ASP NET 4.0

如果我像这样实现 CompareValidator:

<asp:CompareValidator ID="cmprValidatorDoubleType" ControlToValidate="TextBox10" Type="Double" Display="Dynamic" Operator="DataTypeCheck" ErrorMessage="*Not a valid number." runat="server"></asp:CompareValidator>

它将接受诸如“5”之类的值。(不带引号)不带小数的值。这是正常和预期的行为吗?

4

1 回答 1

3

是的,这是一种预期的行为,因为您在此处使用 Attribute:运算符,因此首先将尝试将您输入到 textBox 中的值隐式转换为Type您定义的值。即Double在这里。所以,我猜,5.成功转换为双精度值。

MSDN 关于CompareValidator 的OPERATOR属性这样说:

 A data type comparison of the value entered in the input control being validated and
 the data type specified by the BaseCompareValidator.Type property. Validation fails 
 if the value cannot be converted to the specified data

整数始终可以隐式转换为 : longfloatdouble或中的任何一个decimal。这是因为它是从较小数据类型到较大数据类型的转换,并且不会丢失数据。请参阅此MSDN 链接

此外,当您声明时:

Double d = 5;

或者

Double d = Convert.ToDouble("5.");

检查d调试器中的值。它显示为:5.0。所以你现在可以猜测使用 5 实际上被解释为 5.0,因此验证通过了。

于 2013-09-10T07:31:52.467 回答