2013-09-10 1 views
3

ASP NET 4.0 на победу 7жерех типа нетто CompareValidator двойной DataTypeCheck позволяет неправильные значения

Если я реализую CompareValidator так:

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

Он будет принимать такие значения, как "5." (без кавычек) без десятичных знаков. Это нормальное и ожидаемое поведение?

ответ

2

Да, это ожидаемое поведение, как вы используете атрибут: Operator здесь, так что, во-первых значения, вводимые в TextBox будут опробованы преобразования неявно в Type вы определили. т.е. Double. Итак, я думаю, 5. успешно преобразуется в двойное значение.

MSDN говорит это о OPERATOR свойство CompareValidator:

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 

Целое всегда implicitly convertible к любому из: long, float, double или decimal. Это связано с тем, что это преобразование из более мелких типов данных и отсутствие потери данных. См. Это MSDN link.

Кроме того, когда вы объявляете:

Double d = 5; 

ИЛИ

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

Проверьте значение d отладчика. Он отображается как: 5.0. Итак, теперь вы можете предположить, что использование 5 фактически интерпретируется как 5.0 и, таким образом, проходит проверка.

+0

Да, но должно ли это разрешить 5. Я имею в виду пять плюс точка? Разве это не должно рассматриваться как неправильное или неполное число? –

+0

Нет. Это не так. Так как ваш ТИП, установленный в CompareValidator, равен: Double, поэтому 5 действительно считается двойным, поскольку он неявно преобразуется в 5.0. Это 5.0 также является правильным двойным значением. –

+0

Вы правы. Я пробовал в MS VBA 'CSng (" 5. ")'. Он преобразуется в действительное число. Спасибо и хорошо! –

Смежные вопросы