我的目标是在客户端验证用户输入,具体取决于用户的文化。
我有一个具有以下结构的原始数据模型:
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
(请注意德语'拼写')以获取“高度”的值,则会显示验证错误消息The field Height must be a number
,但我无法提交形式。0.1
(英文'拼写'),我可以提交表单,但服务器端验证会返回以下验证错误消息The value '0.1' is not valid for Height.
所以现在我处于某种死锁状态,我无法离开。
同样,我的目标是根据用户的文化验证客户端和服务器端的十进制数输入(在这种情况下,它被强制为德语)。我做错了什么?
非常感谢任何帮助!提前谢谢!
答案 0 :(得分:8)
不幸的是,jQuery.validate.format和jQuery.Globalization.format函数之间存在命名冲突。因此,您必须更改代码才能使用非jquery Globalization插件。
我刚写了一篇关于它的博文here。
对你来说,它应该是这样的:
<script src="@Url.Content("~/Scripts/globalization.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/globinfo/Globalization.de-DE.js")" type="text/javascript"></script>
<script type="text/javascript">
$.validator.methods.number = function (value, element) {
if (!isNaN(Globalization.parseFloat(value))) {
return true;
}
return false;
}
$(document).ready(function () {
$.culture = jQuery.cultures['de-DE'];
$.preferCulture($.culture.name);
Globalization.preferCulture($.culture.name);
});
</script>
这应该足够了。
答案 1 :(得分:1)
我不得不禁用UnobtrusiveJavaScript。该页面不再立即作出反应,但至少它有效。
您可以在Web.Config中默认禁用。
<appSettings>
<add key="enableSimpleMembership" value="false"/>
<add key="ClientValidationEnabled" value="true"/>
<add key="UnobtrusiveJavaScriptEnabled" value="false"/>
</appSettings>
我使用Microsoft脚本进行验证:
MicrosoftAjax.js
MicrosoftMvcAjax.js
MicrosoftMvcValidation.js
还有jquery-1.4.4.min.js&amp; jquery.glob的事情,但我想我在内部使用它们。验证由MS脚本完成。