我的目标是在客户端基于用户的文化背景来验证用户输入。
我有一个基本的数据模型,其结构如下:
public class User
{
public int UserId { get; set; }
[Required]
[StringLength(20,MinimumLength=3)]
public string Name { get; set; }
[Required]
public double Height { get; set; }
}
此外,我希望启用客户端验证,检查是否为有效数字。因此,我在 _Layout.cshtml 的 <head>
部分中添加了以下行。
<script src="@Url.Content("~/Scripts/jQuery-1.4.2.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
为了能够验证其他语言格式的输入(在这种特定情况下是德语,使用小数点格式0,75
,而在美国则是0.75
),我已经在之前提到的jquery.validate.min.js
和jquery.validate.unobtrusive.min.js
之后添加了以下代码行(jQuery Globalization PlugIn)。
<script src="@Url.Content("~/Scripts/jquery.glob.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/globinfo/jquery.glob.de-de.js")" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function () {
$.culture = jQuery.cultures['de-DE'];
$.preferCulture($.culture.name);
});
</script>
另外,我已经在web.config
文件的system.web
部分中添加了以下行,以确保德国文化始终被选择:
<globalization culture="de-DE" uiCulture="de-DE" />
我现在遇到以下行为:
- 如果我在“高度”值的文本框中输入
0,1
(请注意德国拼写方式),则会出现验证错误消息高度必须是数字
,我将无法提交表单。 - 如果我输入
0.1
(英式拼写),我可以提交表单,但服务器端验证返回以下验证错误消息:值“0.1”对于高度无效。
所以现在我陷入了某种死结,无法解决。
再次说明,我的目标是基于用户的区域设置(在这种情况下强制为德国语言)在客户端和服务器端验证小数输入。我做错了什么?
非常感谢您的帮助!提前致谢!
if
错误地将0
识别为无效值;请使用return !isNaN(Globalization.parseFloat(value));
作为函数体。 - Klemen Slavič