1

RangeValidator获取并使用正则表达式对其value进行input验证。正则表达式的一部分是本地化的十进制字符。

因此,在德国文化中,RangeValidator如果我输入会失败100.00,但它会接受100,00,因为,是德国文化的小数字符。

在HTML5的新input[type=number]( asp:TextBoxwith ) 上,我可以输入or (属性设置为“0.01”,它将始终保持 value 。这将导致在德国文化中一直失败。TextMode="Number"100,00100.00step100.00RangeValidator

将位置更改为en-US可以解决问题,但我需要用户区域设置中的应用程序。

我可以以某种方式告诉RangeValidator始终使用.十进制字符还是有更好的方法来处理这种情况?

4

2 回答 2

0

Page_PreInit您可以在不更改整个 UI 语言的情况下设置特定的数字格式设置并更改小数点分隔符。

    protected void Page_PreInit(object sender, EventArgs e)
    {
        CultureInfo newCulture = (CultureInfo)CultureInfo.CurrentCulture.Clone();
        NumberFormatInfo numberFormat = (NumberFormatInfo)newCulture.NumberFormat.Clone();
        numberFormat.NumberDecimalDigits = 2;
        numberFormat.NumberDecimalSeparator = ".";
        newCulture.NumberFormat = numberFormat;
        System.Threading.Thread.CurrentThread.CurrentCulture = newCulture;
    }
于 2016-09-02T07:17:01.167 回答
0

所以这很脏但有效:

我已经覆盖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语言环境,我只是强制它设置decimalchar.digits2ASPX 标记:

<asp:RangeValidator ID="rv" runat="server" Data-DecimalChar="." Data-Digits="2" MinimumValue="-100" MaximumValue="100" ControlToValidate="tb" Type="Currency" />

但是,这很脏,不是吗?...

在覆盖涉及客户端验证机制的 JS 函数时,请注意 UpdatePanels 的问题,例如这个。

我真正感到困惑的是,即使我只修改客户端脚本,它也能正常工作。服务器端验证接受来自英语文化的值。这真的很奇怪。

于 2016-09-04T23:46:29.610 回答