RangeValidator
将获取input
的value
并使用regex验证它。正则表达式的一部分是本地化的十进制字符。
因此,在德国文化中,如果我输入RangeValidator
,那么100.00
就会失败,但是它会接受100,00
,因为,
是德国文化的十进制字符。
在新的input[type=number]
(asp:TextBox
with TextMode="Number"
)的HTML5上,我可以输入100,00
或100.00
(将step
属性设置为"0.01“),它将始终保存值100.00
。这将导致RangeValidator
在德国文化中一直失败。
将位置更改为en-US
可以解决问题,但我需要用户区域设置中的应用程序。
不知何故,我可以告诉RangeValidator
总是使用.
作为十进制字符,或者有更好的方法来处理这种情况吗?
发布于 2016-09-04 23:46:29
所以这是肮脏的,但有效的:
我重写了框架的ValidatorValidate
函数:
function ValidatorValidate(val, validationGroup, event) {
// new code:
if (typeof (val.customized) == "undefined") {
var data = $(val).data();
for (var key in data) {
val[key] = data[key];
}
val.customized = true;
}
// this code was copied from the framework:
val.isvalid = true;
if ((typeof (val.enabled) == "undefined" || val.enabled != false) && IsValidationGroupMatch(val, validationGroup)) {
if (typeof (val.evaluationfunction) == "function") {
val.isvalid = val.evaluationfunction(val);
if (!val.isvalid && Page_InvalidControlToBeFocused == null &&
typeof (val.focusOnError) == "string" && val.focusOnError == "t") {
ValidatorSetFocus(val, event);
}
}
}
ValidatorUpdateDisplay(val);
}
现在,我可以使用数据属性在验证器上强制使用特定的JS变量。要强制RangeValidator
使用en-US
区域设置,我只需强制它从ASPX标记将decimalchar
设置为.
,将digits
设置为2
:
<asp:RangeValidator ID="rv" runat="server" Data-DecimalChar="." Data-Digits="2" MinimumValue="-100" MaximumValue="100" ControlToValidate="tb" Type="Currency" />
但是,这太脏了,不是吗?
我真正感到困惑的是,即使我只是在修改客户端脚本时,这也是可行的。服务器端验证接受来自英语文化的值。这真的很奇怪。
https://stackoverflow.com/questions/39280347
复制相似问题