0

我的 Asp.Net MVC 有一个小问题。

现在我已经开发了一个英文网站,一切正常,我所有的文本都已经本地化,而且我已经有了一个基于会话的系统。当我使用另一种语言(在我的情况下是法语)时,它会将Thread.CurrentThread.CurrentUICultureand更改为Thread.CurrentThread.CurrentCulture从“fr”创建的文化信息。

我所有的翻译都有效,但我在一种形式上有问题。

在法国,小数部分与整数部分用“,”隔开。服务器验证可以很好地使用它并将“234,512”(并且也知道将“234.512”转换为double)。

但客户端验证不接受这一点,它说:

"Le champ XYZ doit être un nombre."

所以它有正确的本地(因为消息是用法语翻译的),但它似乎想要在“235,55”中编辑的数字。

一开始我以为没什么大不了的,用户可以输入“234.512”格式的数字,但问题是数据的版本,因为线程是法语,它用“234,512”填充模型,并且不是“234.512”,并且由于该客户必须在每次更改时更改分隔符(如果他们没有在此字段上进行更改,则事件)否则他们会收到客户端验证错误(当我按下提交按钮时没有调用,我检查了几次)。

那么我应该怎么做才能让客户端验证脚本在当前语言环境中双重工作?

非常感谢你!

4

2 回答 2

2

jquery.validate.js(或 jquery.validate.unobtrusive.js)似乎有问题,它只接受点作为分隔符。

查看以下帖子以获取解决方案: http ://www.mfranc.com/2011/07/05/jquery-valdiator-modyfing-decimal-separator/

或者

http://www.campusmvp.net/asp-net-mvc-3-and-the-coma-in-decimals/

于 2012-09-07T08:23:15.180 回答
1

这是已知问题。jquery 中的 Javascript 验证器除了点之外不允许任何东西。最简单的方法是更改​​ jquery.validate.min.js(左右)或覆盖您的 cshtml 中的自定义验证器。在 jquery 内部它将是:

// http://docs.jquery.com/Plugins/Validation/Methods/number
number: function(value, element) {
    //return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(value); <-- original 
    return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:[\.,]\d+)?$/.test(value); 
},
于 2012-09-07T08:38:11.990 回答